用户定义的魔术方法:什么是“记录的魔术功能”?

时间:2012-03-14 11:35:45

标签: php magic-methods

我的问题很简单,这是上下文:

http://php.net/manual/en/language.oop5.magic.php

  

魔术方法

     

函数名称__construct()__destruct()__call(),   __callStatic()__get()__set()__isset()__unset()__sleep()__wakeup(),__ toString(),__ invoke(), __set_state()和__clone()在PHP类中是神奇的。你不能拥有这些名字的功能   你的任何课程,除非你想要魔术功能相关联   和他们一起。

     

PHP将所有以__开头的函数名称保留为神奇的。除非您需要一些记录的魔术功能,否则建议您不要在PHP中使用带__的函数名。

我了解这些方法的用途以及如何使用它们。我不明白的是:

  

...除非你想要一些记录的魔术功能。

这甚至意味着什么?是否有实际原因来创建用户定义的__magicMethods()

2 个答案:

答案 0 :(得分:7)

我认为它们只是意味着最好不要使用__作为方法的起始名称,因为PHP为其魔术方法保留了该约定,如果你将它用于方法,它可能会被覆盖在未来,并有一些神奇的功能。至少那是我理解的方式

编辑 - 更清楚:假设您为自己的业务逻辑实现了一个名为__toNumber()的方法。在PHP的未来版本中,他们决定每当一个对象被用作数字时(也许当你做$result = 3 * $yourObject时),魔术方法__toNumber()将被调用...你的对象将有一些“魔法”记录的功能,即使您没有专门添加它

答案 1 :(得分:4)

这意味着永远不要使用以__开头的名称作为函数,除非您想要PHP手册中记录的魔术功能。