Serializable::serialize

(PHP 5 >= 5.1.0)

Serializable::serializeПредставляет объект в виде строки

Описание

abstract public string Serializable::serialize ( void )

Возращает строковое представление объекта.

Замечание:

Этот метод действует как деструктор объекта. Метод __destruct() не вызывается после этого метода.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает строковое представление объекта или NULL

Ошибки

Вызывает Exception при возвращении типов, отличных от string или NULL

Смотрите также

Коментарии

The documentation here is somewhat misleading. Where it says "This method acts as the destructor of the object. The __destruct() method will not be called after this method," I believe the intent is not that the destructor is not run on the object itself, but that the destructor is not called /as part of the serialization process/. 

That is, the object will still be destructed as it goes out of scope as normal, but the destructor is not called as a part of the object's serialization.
2013-11-07 19:30:19
http://php5.kiev.ua/manual/ru/serializable.serialize.html
Автор:
I don't like the bad docs here, which are wrongly claiming that "serialize(): This method acts as the destructor of the object. The __destruct() method will not be called after this method.".

They are simply meaning that serialize() will NOT call __destruct(). That is the ONLY thing they mean.

Your object that is being serialized will continue to live as a normal object. So you should NOT treat serialize() as your destructor! Treat your object as a still-living copy that the user may be using!

The destructor will always run as normal, later, when your object goes out of scope (or is forcibly unset() by you)).

Example with proof:

<?php

class implements Serializable
{
    public 
$data = [];

    public function 
__destruct()
    {
        echo 
"Destruct of A called.\n";
    }

    public function 
serialize()
    {
       
printf("- Serialize of %s called.\n", static::class);
        return 
serialize($this->data);
    }

    public function 
unserialize($serialized)
    {
       
printf("- Unserialize of %s called.\n", static::class);
       
$this->data unserialize($serialized);
    }
}

class 
extends A
{
    public function 
__destruct()
    {
        echo 
"Destruct of B called.\n";
    }
}

$a = new A();
$a->data['inner_b'] = new B();
var_dump($a);

echo 
"-----------------\n";
echo 
"Calling serialize($a):\n";
$str serialize($a);
echo 
"-----------------\n";
echo 
"End of script shutdown from here on:...\n";

?>

Result:

```
object(A)#1 (1) {
  ["data"]=>
  array(1) {
    ["inner_b"]=>
    object(B)#2 (1) {
      ["data"]=>
      array(0) {
      }
    }
  }
}
-----------------
Calling serialize($a):
- Serialize of A called.
- Serialize of B called.
-----------------
End of script shutdown from here on:...
Destruct of A called.
Destruct of B called.
```
2017-09-30 13:52:09
http://php5.kiev.ua/manual/ru/serializable.serialize.html

    Поддержать сайт на родительском проекте КГБ