当我尝试重写类变量的方式与重写PHP中的类方法的方式相同。如:PHP变量覆盖
class DataMapper {
protected $_name = null;
public function printName() {
echo $this->_name;
}
}
class Model extends DataMapper {
protected $_name = 'Ana';
}
$test = new Model();
$test->printName();
这是打印'安娜'。
为什么PHP可以做这样的事情呢?它打破了面向对象范式的规律
我不认为语言行为在任何司法管辖区都是非法的。变量实际上不需要被映射。而在PHP中,对象也是非常简单的字典。你只在这里重新声明默认值。 – mario 2011-06-14 04:56:36
那些不是类变量(即'static'),它们是对象/实例变量。正如人们所解释的,这就是继承应该如何与受保护的成员一起工作。如果你想设置一个私有类变量(即'private static $ myVar ='Ana';'),那么它就不会在任何子类中定义。 – joelhardi 2011-06-14 05:11:04
我理解它的方式,你是对的。您通常不能覆盖变量。在这里,你并没有真的这么做,你只是简单地重新宣布一个变量,而原来的东西却丢失了。反正我觉得呢。 我认为PHP的标准只是稍微宽松一些,并且可以让您摆脱可疑的语法/操作。 – Jonathon 2013-04-17 01:59:20