为什么PHP魔法必须公开?

TeC*_*n4K 5 php phpdoc getter-setter public-method

我在我的PHP类中使用了神奇的方法,但当我尝试将它们设为私有时,我会发出警告:

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

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

Cha*_*rry 7

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

例如:

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

// this is an overloaded property
$YourClass->overloaded = 'test';
Run Code Online (Sandbox Code Playgroud)

上面的代码被"转换"为:

$YourClass->__set('overloaded', 'test');
Run Code Online (Sandbox Code Playgroud)

稍后当您获得属性值时:

$var = $YourClass->overloaded;
Run Code Online (Sandbox Code Playgroud)

此代码被"转换"为:

$YourClass->__get('overloaded');
Run Code Online (Sandbox Code Playgroud)

在每种情况下,魔术方法,__get以及__set,被从类的外部调用所以这些方法将需要public.