php魔术方法调用顺序
字数 627 2022-08-27 00:32:35

来看个示例:

<?php
class Test{
public function __construct(){
echo 'construct run';
}
public function __destruct(){
echo 'destruct run';
}
public function __toString(){
echo 'toString run';
return 'str';
}
public function __sleep(){
echo 'sleep run';
return array();
}

public function __wakeup(){
echo 'wakeup run';
}
}

echo '<br>new了一个对象,对象被创建,执行_construct方法</br>';
\(test = new Test(); ​ echo '<br>serialize了一个对象,对象被序列化,先执行_sleep方法,再序列化</br>'; \)sTest = serialize(\(test); ​ echo '<br>unserialize()了字符串。先执行_wakeup方法,再反序列化</br>'; \)usTest = unserialize(\(sTest); ​ echo '<br>把Test对象当做字符串使用,执行_toString方法</br>'; \)string = 'use Test obj as str '.$test;

echo '<br>程序执行完毕,对象自动销毁,执行_destruct方法</br>';?>

执行结果:

通过这个例子可以清楚的看到 5 个魔法函数的执行顺序。

public function __ wakeup(){ echo &#x27;wakeup run&#x27;; } } ​ echo &#x27;&lt;br&gt;new了一个对象,对象被创建,执行_ construct方法&lt;&#x2F;br&gt;&#x27;; $test = new Test(); ​ echo &#x27;&lt;br&gt;serialize了一个对象,对象被序列化,先执行_ sleep方法,再序列化&lt;&#x2F;br&gt;&#x27;; $sTest = serialize($test); ​ echo &#x27;&lt;br&gt;unserialize()了字符串。先执行_ wakeup方法,再反序列化&lt;&#x2F;br&gt;&#x27;; $usTest = unserialize($sTest); ​ echo &#x27;&lt;br&gt;把Test对象当做字符串使用,执行_ toString方法&lt;&#x2F;br&gt;&#x27;; $string = &#x27;use Test obj as str &#x27;.$test; ​ echo &#x27;&lt;br&gt;程序执行完毕,对象自动销毁,执行_ destruct方法&lt;&#x2F;br&gt;&#x27;;?&gt; 执行结果: 通过这个例子可以清楚的看到 5 个魔法函数的执行顺序。