【问题标题】:__set_state() - An explanation of the note on the php.net__set_state() - php.net 上注释的解释
【发布时间】:2018-05-02 15:00:49
【问题描述】:
http://php.net/manual/en/language.oop5.magic.php#object.set-state
注意:在导出对象时,var_export() 不会检查对象的类是否实现了 __set_state(),因此如果没有实现 __set_state(),则重新导入此类对象会失败。特别是,这会影响一些内部类。程序员有责任验证只有对象会被重新导入,其类实现了 __set_state()。
1) __set_state() 是我们自己在每个我们想要的对象中实现的东西?
2) 一个对象可以拥有它还是不拥有它?
3) “重新导入”是什么意思? var_export 进行导出,因此我们导入或实际上“重新导入”,我不明白这部分。
4) "这特别影响一些内部类";更多关于这方面的信息会很好
【问题讨论】:
标签:
php
magic-methods
setstate
【解决方案1】:
1) __set_state() 是我们在每个
我们想把它放在哪里?
是的。
2) 一个对象可以拥有还是不拥有?
是的。
3) “重新导入”是什么意思? var_export 进行导出,所以我们导入或实际上“重新导入”,我不明白这部分。
$c = new C();
$exported_value = var_export($c) # export
$new_c = eval($exported_value) # re-import
此外,如果您将 $exported_value 存储为文件并需要它 - 这将构成重新导入。
4) "这特别影响一些内部类";更多关于这方面的信息会很好
基于PHP terminology 我猜这意味着 PHP 内置在类中,例如Date and Time related classes。这基本上意味着您不能假设 PHP 的内置类实现 __set_state() 方法。