__destruct 在 php 中实现 Serializable 接口时是否正确调用了方法?

__destruct method is called correctly when implementing Serializable interface in php?

我正在学习Serializable界面。

php.net表示

This does not invoke __destruct() or have any other side effect unless programmed inside the method.

根据我的感觉,我想将其分为两部分:

1): __destruct() 在实现 Serializable 界面。但是当我使用 __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();

__destruct或方法工作正常,这只是输出以下内容:

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();

它return以下解析器错误为:

Parse error: syntax error, unexpected 'public' (T_PUBLIC) in .....

为什么 php.net 提供了错误的文档或者可能是我错了。请任何人都可以教我 __constructor()__destructor() 的文档 Serializable接口在下面参考页?

参考 Link http://php.net/manual/en/class.serializable.php.

实现Serializable接口与__destruct()方法无关。 serialize() 方法用于将对象保存为字符串,可以将其保存在文件中(就像会话系统那样)。此步骤不会触发 __destruct() 方法,因为该对象仍然存在并且很可能存在对该对象的变量引用。

在第一种情况下,任何序列化步骤都不会调用 __destruct() 方法。事实上,您甚至没有序列化您的对象。然而,你的析构函数被调用是因为你的脚本结束了,所有的对象都将被删除。

在你的第二种情况下,你不能在方法内部声明方法,你会在你的问题中得到错误信息。当你在你的 serialize() 方法中时,你可以调用 __destruct() ,如果你想...或不想。但是对于 Serializable 接口,__destruct() 方法是无关紧要的。