访问子类中的父属性值

时间:2012-05-03 23:52:57

标签: php

我有一个奇怪的问题,我在父类中设置值,但无法在扩展父类的子类中访问这些值。

class Parent
{
    protected $config;

    public function load($app)
    {
        $this->_config();
        $this->_load($app);
    }

    private function _config()
    {
        $this->config = $config; //this holds the config values
    }

    private function _load($app)
    {
        $app = new $app();
        $this->index;
    }
}

class Child extends Parent
{
    public function index()
    {
        print_r($this->config); // returns an empty array
    }
}

$test = new Parent();
$test->load('app');

当我这样做时,我打印出一个空阵列。但如果我这样做,那么我就可以访问这些配置值。

private function _load($app)
{
    $app = new $app();
    $app->config = $this->config
    $app->index;

}

class Child extends Parent
{
    public $config;
          ....
}

然后我可以从父母那里访问配置数据。

2 个答案:

答案 0 :(得分:2)

您在初始化任何内容之前访问这些值。首先,您必须设置值。

示例:call a method是父类,它在子类的构造函数上设置值。

class Child extends Parent
{
    public function __construct() {
       $this -> setConfig(); //call some parent method to set the config first
    }
    public function index()
    {
        print_r($this->config); // returns an empty array
    }
}

更新:您似乎也对OOP的概念感到困惑

class Parent { ..... }
class child extends Parent { ..... }
$p = new Parent(); // will contain all method and properties of parent class only
$c = new Child(); // will contain all method and properties of child class and parent class

但是,您必须使用父方法和属性,就像在普通对象中一样。

让我们看另一个例子:

class Parent { 
     protected $config = "config";
}
class Child extends Parent {
     public function index() {
           echo $this -> config; // THis will successfully echo "config" from the parent class
     }
}    

但另一个例子

class Parent { 
     protected $config;
}
class Child extends Parent {
     public function index() {
           echo $this -> config; //It call upon the parent's $config, but so far there has been no attempt to set an values on it, so it will give empty output.
     }
}

答案 1 :(得分:1)

这是因为父母的财产受到保护。将其设置为公共,您可以在子类中访问它。或者,在父类中创建一个返回config:

的方法
public function getConfig()
{
    return $this->config;
}