__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接口在下面参考页?
实现Serializable
接口与__destruct()
方法无关。 serialize()
方法用于将对象保存为字符串,可以将其保存在文件中(就像会话系统那样)。此步骤不会触发 __destruct()
方法,因为该对象仍然存在并且很可能存在对该对象的变量引用。
在第一种情况下,任何序列化步骤都不会调用 __destruct()
方法。事实上,您甚至没有序列化您的对象。然而,你的析构函数被调用是因为你的脚本结束了,所有的对象都将被删除。
在你的第二种情况下,你不能在方法内部声明方法,你会在你的问题中得到错误信息。当你在你的 serialize()
方法中时,你可以调用 __destruct()
,如果你想...或不想。但是对于 Serializable
接口,__destruct()
方法是无关紧要的。
我正在学习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接口在下面参考页?
实现Serializable
接口与__destruct()
方法无关。 serialize()
方法用于将对象保存为字符串,可以将其保存在文件中(就像会话系统那样)。此步骤不会触发 __destruct()
方法,因为该对象仍然存在并且很可能存在对该对象的变量引用。
在第一种情况下,任何序列化步骤都不会调用 __destruct()
方法。事实上,您甚至没有序列化您的对象。然而,你的析构函数被调用是因为你的脚本结束了,所有的对象都将被删除。
在你的第二种情况下,你不能在方法内部声明方法,你会在你的问题中得到错误信息。当你在你的 serialize()
方法中时,你可以调用 __destruct()
,如果你想...或不想。但是对于 Serializable
接口,__destruct()
方法是无关紧要的。