Я учусь Сериализуемый интерфейс.
php.net заявил, что
Это не вызывает __destruct () и не имеет других побочных эффектов, если только
запрограммирован внутри метода.
который я хотел бы разделить на две части в соответствии с моим пониманием как:
1): __destruct () не вызывается при реализации Сериализуемый интерфейс. Но когда я использую __destructor () метод как:
class myClass implements Serializable{
public function serialize(){
return 'I am serialized';
}
public function unserialize($serialized){
//--
}
public function __destruct(){
echo "Hello world";
}
}
$obj = new myClass();
__destructor Метод работает нормально, и это просто выводит следующее:
Hello world
2): Если вам нужно использовать __destruct () метод, который вы должны объявить внутри метода. Но когда я объявляю внутри метода как:
class myClass implements Serializable{
public function serialize(){
return 'I am serialized';
}
public function cutomDest(){
public function __destruct(){
echo "Hello world";
}
}
public function unserialize($serialized){
//--
}
}
$obj = new myClass();
Вернуть следующее ошибка парсера как:
Parse error: syntax error, unexpected 'public' (T_PUBLIC) in .....
Зачем php.net предоставляет неправильную документацию или, может быть, я ошибаюсь. Пожалуйста, кто-нибудь может научить меня документации __конструктор() а также __destructor () в концепции Сериализуемый интерфейс на следующей странице ссылки?
Ссылка Ссылка http://php.net/manual/en/class.serializable.php.
Реализация Serializable
интерфейс не имеет ничего общего с __destruct()
метод. serialize()
Метод используется для сохранения объекта в виде строки, которую можно сохранить в файле (как это делает система сеансов). Этот шаг не вызывает __destruct()
метод, так как объект все еще существует, и, скорее всего, существует переменная ссылка на этот объект.
В вашем первом случае __destruct()
метод не вызывается ни одним шагом сериализации. На самом деле, вы даже не сериализуете свой объект. Однако ваш деструктор вызван, потому что ваш скрипт завершился и все объекты будут удалены.
Во втором случае вы не можете объявлять методы внутри методов, вы получаете сообщение об ошибке в своем вопросе. Когда вы в вашем serialize()
метод, который вы можете вызвать __destruct()
если хочешь … или не хочешь. Но в отношении Serializable
интерфейс __destruct()
метод не имеет значения.
Других решений пока нет …