PHP魔术方法__get()和__set() The magic method must have public visibility

在LAMP兄弟连的教学视频中,__get()和__set()都被加上了private修饰,并且视频中这样并未出错。但是目前来讲,给魔术方法加上private修饰,会造成warning错误:

Warning: The magic method __get() must have public visibility and cannot be static in C:\wamp\www\oop.php on line28

百度这个问题,没有一个确切的答复,所有给出的答案都是模糊不清的。

有人回答说,加了private之后之所以会报错,是因为__get()和__set()本身存在就是为了被调用,现在加上了private,还如何调用?

这种回答实在是大错特错。从输出结果来看,虽然报错,但是我们的程序仍然正常输出了,输出的是经过魔术方法处理之后的正确结果。

那么__get()和__set()能加private吗?

能!如果你屏蔽warning的话。

__get()和__set()加了private还怎么调用?

这两个方法本来就不是让人为调用的。而是系统自动调用。根本不存在说加了private就调用不了这一说。

魔术方法的调用机制我们应该搞清楚,这是最基本的。至于修饰的问题,既然已经warning了,就不要再加了。加private的本意,是防止外部手动调用。

Tips:只有弱类型语言才有魔术方法。


你可能感兴趣的:(PHP魔术方法__get()和__set() The magic method must have public visibility)