oop — метод __destruct вызывается правильно при реализации интерфейса Serializable в php?

Я учусь Сериализуемый интерфейс.

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.

0

Решение

Реализация Serializable интерфейс не имеет ничего общего с __destruct() метод. serialize() Метод используется для сохранения объекта в виде строки, которую можно сохранить в файле (как это делает система сеансов). Этот шаг не вызывает __destruct() метод, так как объект все еще существует, и, скорее всего, существует переменная ссылка на этот объект.

В вашем первом случае __destruct() метод не вызывается ни одним шагом сериализации. На самом деле, вы даже не сериализуете свой объект. Однако ваш деструктор вызван, потому что ваш скрипт завершился и все объекты будут удалены.

Во втором случае вы не можете объявлять методы внутри методов, вы получаете сообщение об ошибке в своем вопросе. Когда вы в вашем serialize() метод, который вы можете вызвать __destruct() если хочешь … или не хочешь. Но в отношении Serializable интерфейс __destruct() метод не имеет значения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]