【问题标题】:__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() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2011-12-07
    • 2011-03-18
    相关资源
    最近更新 更多