PHP变量覆盖

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类调用(并由其继承).