【发布时间】:2016-09-29 23:24:46
【问题描述】:
有没有办法将magic property 标记为已弃用?考虑以下简化代码:
/**
* Example class
*
* @property string $foo A foo variable.
*/
class Example {
/**
* Magic getter
*/
public function __get($var) {
if('foo' === $var) {
// do & return something
}
}
}
现在,如何指示其他开发人员,他们不应再使用Example::$foo?我想到的唯一可行的解决方案是:
/**
* Example class
*/
class Example {
/**
* A foo variable.
*
* @var string
* @deprecated
*/
public $foo;
/**
* Magic getter
*/
public function __get($var) {
if('foo' === $var) {
// do & return something
}
}
}
但这既破坏了我的代码(不调用getter),也感觉不是很优雅。
【问题讨论】:
-
抛出警告或异常,并记录下来?
-
Seems legit to me - 不编译?
-
@self 我不想破坏旧的依赖关系 - 只是表明它不应该在新代码中使用。
-
@RobbieAverill Magic __get() 方法在我明确声明类内的公共属性时未被调用。
-
您不应该将其设置为私有以便仍然使用魔法吸气剂吗?公共上下文不会调用魔术方法。据我所知。你有 3 个选择:属性不存在 -> 属性重载 -> 调用魔法上下文属性是私有的,不能从类内部访问 __get() 被称为显式