Heim >Backend-Entwicklung >PHP-Tutorial >php 魔术方法 __sleep __wakeup __toString __debuginfo

php 魔术方法 __sleep __wakeup __toString __debuginfo

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-29 09:07:241164Durchsuche

__sleep():

使用serialize()序列化的时候,会检测类中是否有__sleep()魔术方法,有的话会先调用__sleep(),返回一个包含对象中所有需要序列化的变量名称的数组

<code><span><?php </span><span><span>class</span><span>test</span>{</span><span>public</span><span>$name</span>=<span>'demon'</span>;

    <span>private</span><span>$age</span>=<span>'19'</span>;

    <span>public</span><span><span>function</span><span>__sleep</span><span>()</span>{</span><span>return</span> [<span>'name'</span>];
    }  
}

<span>$test</span> = <span>new</span> test();
<span>echo</span> serialize(<span>$test</span>);
<span>//输出结果:O:4:"test":1:{s:4:"name";s:5:"demon";}</span></span></code>

__wakeup()

使用serialize()序列化的时候,会检测类中是否有__wakeup()魔术方法,有的话会先调用__wakeup(),执行一些初始化操作

<code><span><?php </span><span><span>class</span><span>test</span>{</span><span>public</span><span>$name</span>=<span>'demon'</span>;

    <span>private</span><span>$age</span>=<span>'19'</span>;

    <span>public</span><span><span>function</span><span>say</span><span>()</span>{</span><span>echo</span><span>"反序列化"</span>;
    }

    <span>public</span><span><span>function</span><span>__wakeup</span><span>()</span>{</span><span>$this</span>->say();
    }   
}

<span>$test</span> = <span>new</span> test();
unserialize(serialize(<span>$test</span>));
<span>//输出结果:反序列化</span></span></code>

__toString()

__toString()用于一个类被当做字符串使用时的回应,只能返回一个字符串

<code><span><?php </span><span><span>class</span><span>test</span>{</span><span>public</span><span>$name</span>=<span>'demon'</span>;

    <span>private</span><span>$age</span>=<span>'19'</span>;

    <span>public</span><span><span>function</span><span>__toString</span><span>()</span>{</span><span>return</span><span>'test'</span>;
    } 
}

<span>$test</span> = <span>new</span> test();
<span>echo</span><span>$test</span>;
<span>//输出结果:test</span></span></code>

__debuginfo()

__debuginfo() 是php5.6增加的特性,var_dump()一个类时的回应,返回一个包含对象属性的数组

<code><span><?php </span><span><span>class</span><span>test</span>{</span><span>public</span><span>$name</span>=<span>'demon'</span>;

    <span>private</span><span>$age</span>=<span>'19'</span>;

    <span>public</span><span><span>function</span><span>__debuginfo</span><span>()</span>{</span><span>return</span> [<span>'name'</span>];
    }

}

<span>$test</span> = <span>new</span> test();
var_dump(<span>$test</span>);
<span>//输出结果:object(test)#1 (1) { [0]=> string(4) "name" }</span></span></code>
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了php 魔术方法 __sleep __wakeup __toString __debuginfo,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn