我的问题很简单,这是上下文:
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()
?
答案 0 :(得分:7)
我认为它们只是意味着最好不要使用__
作为方法的起始名称,因为PHP为其魔术方法保留了该约定,如果你将它用于方法,它可能会被覆盖在未来,并有一些神奇的功能。至少那是我理解的方式
编辑 - 更清楚:假设您为自己的业务逻辑实现了一个名为__toNumber()
的方法。在PHP的未来版本中,他们决定每当一个对象被用作数字时(也许当你做$result = 3 * $yourObject
时),魔术方法__toNumber()
将被调用...你的对象将有一些“魔法”记录的功能,即使您没有专门添加它
答案 1 :(得分:4)
这意味着永远不要使用以__
开头的名称作为函数,除非您想要PHP手册中记录的魔术功能。