PHP:从子类访问受保护的var

时间:2016-09-05 07:04:44

标签: php class parent-child protected

我正在学习PHP,而且我遇到了以下代码:

<?php

class dogtag {

    protected $Words;

}

class dog {

    protected $Name;
    protected $DogTag;

    protected function bark() {
        print "Woof!\n";
    }

}

class poodle extends dog {

    public function bark() {
        print "Yip!\n";
    }

}

$poppy = new poodle;
$poppy->Name = "Poppy";
$poppy->DogTag = new dogtag;
$poppy->DogTag->Words = "My name is
Poppy. If you find me, please call 555-1234";

var_dump($poppy);

?>

这就是我得到的:

PHP Fatal error:  Uncaught Error: Cannot access protected property poodle::$Name

这对我来说很奇怪,因为我应该从子类中访问受保护的变量和函数。

可以请某人解释我错在哪里吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

确实可以从子类访问受保护的变量。但是,您无法从子类中访问变量。

如果你创建变量getLogs,你可以从课外访问它们。

文档:http://php.net/manual/en/language.oop5.visibility.php

示例:

public

答案 1 :(得分:0)

您无法访问该属性&#39;单词&#39;您需要将其公开

答案 2 :(得分:0)

您可以在类中添加magic方法 - 这样您就可以从类外部访问和操作私有属性。

class foo{
    private $bah;

    public function __construct(){
        $this->bah='hello world';
    }
    public function __get( $name ){
        return $this->$name;
    }
    public function __set( $name,$value ){
        $this->$name=$value;
    }
    public function __isset( $name ){
        return isset( $this->$name );
    }
    public function __unset( $name ){
        unset( $this->$name );  
    }
}

$foo=new foo;
echo $foo->bah;

$foo->bah='banana';
echo $foo->bah;