bri*_*ian 21 php oop overriding
当我尝试覆盖类变量时,覆盖PHP中的类方法.喜欢:
class DataMapper {
protected $_name = null;
public function printName() {
echo $this->_name;
}
}
class Model extends DataMapper {
protected $_name = 'Ana';
}
$test = new Model();
$test->printName();
Run Code Online (Sandbox Code Playgroud)
它打印'Ana'.
为什么PHP可以做这样的事情?它打破了面向对象范式的规律
Fra*_*nes 25
不是.这就是PHP应该如何工作的方式.看看PHP类和对象可见性.
即使它们不是相同的实例,相同类型的对象也可以访问彼此私有和受保护的成员.这是因为在这些对象内部时已经知道实现特定的细节.
因为Model扩展了DataMapper,它可以访问它的函数,变量等,但它可以覆盖它们,这就是发生的事情.尽管您的函数存在于DataMapper类中,但它是从名称设置为Ana的Model类调用(并由其继承).