[英]PHP OOP: difference between parent and $this when accessing protected method
从扩展类调用受保护的属性或方法时,parent和$this
之间有什么区别吗? 例如:
<?php
class classA
{
public $prop1 = "I'm a class property!";
public function setProperty($newval)
{
$this->prop1 = $newval;
}
protected function getProperty()
{
return $this->prop1 . "<br />";
}
}
class classB extends classA
{
public function callProtected()
{
return $this->getProperty();
}
public function callProtected2()
{
return parent::getProperty();
}
}
$testobj = new classB;
echo $testobj->callProtected();
echo $testobj->callProtected2();
?>
输出:
I'm a class property!
I'm a class property!
区别在于在B类中扩展getProperty。
在这种情况下,$ this总是调用扩展版本(来自classB),而parent将调用classA中的原始版本
注意例子:
<?php
class classA
{
public $prop1 = "I'm a class property!";
public function setProperty($newval)
{
$this->prop1 = $newval;
}
protected function getProperty()
{
return $this->prop1 . "<br />";
}
}
class classB extends classA
{
protected function getProperty() {
return 'I\'m extended<br />';
}
public function callProtected()
{
return $this->getProperty();
}
public function callProtected2()
{
return parent::getProperty();
}
}
$testobj = new classB;
echo $testobj->callProtected();
echo $testobj->callProtected2();
输出:
I'm extended<br />
I'm a class property!<br />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.