为什么PHP魔法必须公开?

时间:2011-11-22 17:32:09

标签: php getter-setter phpdoc public-method

我在我的PHP课程中使用了神奇的方法,但是当我尝试将它们设为私有时,我会收到警告:

  

警告:魔术方法__get()必须具有公共可见性,但不能   在......中是静止的。

我不希望在Eclipse自动完成中使用这些方法。 (也许是phpdoc的一种方式?) 所以我的问题是,为什么这些方法必须公开?

1 个答案:

答案 0 :(得分:7)

因为您正在从类外部的作用域调用方法。

例如:

// this can be any class with __get() and __set methods
$YourClass = new YourOverloadableClass();

// this is an overloaded property
$YourClass->overloaded = 'test';

以上代码“转换”为:

$YourClass->__set('overloaded', 'test');

稍后您获得的属性值如下:

$var = $YourClass->overloaded;

此代码已“转换”为:

$YourClass->__get('overloaded');

在每种情况下,都会从类外部调用魔术方法__get__set,因此这些方法需要为public