繁体   English   中英

PHP OOP:访问受保护方法时父和$之间的差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM