Comments 26
на php.net этот раздел справки дополнен/исправлен — там как раз есть return array(...);
+1
ага, пример обновили
0
UFO just landed and posted this here
оно было обновлено более чем полгода назад. есть мнение, что автор поста пользуется документацией годовой давности.
+7
именно так, chm годовалый.
-3
ну тогда и проверять нужно было на релизе годовалой давности, для которого документация была актуальна.
странно, что вы вообще не взяли php 4, в котором этих магических методов нет.
странно, что вы вообще не взяли php 4, в котором этих магических методов нет.
+4
Ага и что же изменилось за год в релизах?
Серия незначительных баг-фиксов.
5.3 еще не релиз.
Серия незначительных баг-фиксов.
5.3 еще не релиз.
-9
Нужно регулярно обновлять мануалы. Потому что даже в старых и проверенных функциях бывают изменения. Например добавляют ещё один параметр. Нужно быть в курсе всех изменений, чтобы потом не городить велосипеды, а потом оказывается всё это реализовано в стандартной функции, которая отсутствует в старом мануале.
+2
> __wakeup вызывается после unserialize, чтоб можно было автоматом необходимые связи вернуть в зад.
Куда, куда вернуть???
Куда, куда вернуть???
+4
у кого что болит…
-1
Не факт, что болит. Может человек хотел сказать, что «взад» в данном случае пишется слитно.
+3
Не знаю у кого там что болит, но, уважающие своих читателей авторы, перечитывают свои заметки перед публикацией, чтобы не допускать таких ляпов.
-2
даже в старой версии 2008-12-26 документации уже не было этого примера
не вводите людей в заблуждение
не вводите людей в заблуждение
0
нашёл версию от 07-03-2005
примеров там нет вообще, но зато есть такой вот текст:
«serialize() checks if your class has a function with the magic name __sleep. If so, that function is executed prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized. „
примеров там нет вообще, но зато есть такой вот текст:
«serialize() checks if your class has a function with the magic name __sleep. If so, that function is executed prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized. „
0
Пожалуйста, пожалуйста, исправьте слово «ньюанс» в заголовке.
+3
вернуть в зад))) ))))
0
нюансы
+2
Рекомендуется к прочтению: SPL: Serializable Interface
Пример использования:
Пример использования:
class A implements Serializable { private $x='y'; function __construct() { echo __METHOD__ . " called\n"; } function __destruct() { echo __METHOD__ . " called\n"; } function serialize() { return $this->x; } function unserialize($s) { $this->x=$s; } } class B { private $x='y'; function __construct() { echo __METHOD__ . " called\n"; } function __destruct() { echo __METHOD__ . " called\n"; } function __sleep() { return array('x'); } } echo "Serializable (the new way)\n"; $x1=new A; $s=serialize($x1); var_dump($s); $y1=unserialize($s); var_dump($y1); echo "__sleep/__wakeup (the old way)\n"; $x2=new B; $s=serialize($x2); var_dump($s); $y2=unserialize($s); var_dump($y2);
+2
ага SPL снова рулит )))
фишка в том что этот подход тоже не панацея, он позволяет поймать события и реализовать сериализацию своим путем.
Но вернемся к задаче:
Перед сериализацией обнулить ссылку на объект бд, сохранив все остальное.
Метод serialize интерфейса Serializable должен вернуть строковое представление объекта.
class A implements Serializable
{
private $db;
private $data = 12312312;
public function serialize()
{
$this->db = null;
return serialize($this);
}
public function unserialize($s)
{
}
}
$a = new A();
serialize($a);
в результате выполнения схватим Fatal error: Maximum function nesting level of '100' reached, aborting!
То есть нужна именно сериализация, это не спасает без тонны гвоздей.
фишка в том что этот подход тоже не панацея, он позволяет поймать события и реализовать сериализацию своим путем.
Но вернемся к задаче:
Перед сериализацией обнулить ссылку на объект бд, сохранив все остальное.
Метод serialize интерфейса Serializable должен вернуть строковое представление объекта.
class A implements Serializable
{
private $db;
private $data = 12312312;
public function serialize()
{
$this->db = null;
return serialize($this);
}
public function unserialize($s)
{
}
}
$a = new A();
serialize($a);
в результате выполнения схватим Fatal error: Maximum function nesting level of '100' reached, aborting!
То есть нужна именно сериализация, это не спасает без тонны гвоздей.
-3
Вот если бы кто-то унаследовал SimpleXMLElement и научил его сериализироваться…
+1
Sign up to leave a comment.
Нюансы сериализации