PHP类扩展不提供反馈

时间:2014-06-13 06:19:11

标签: php class extend

我想要做的是使用“extends”将几个类链接在一起。它有点起作用,但不像我预期的那样。所以我一定做错了。

从我收集的内容来看,当你扩展一个类时,你继承了它的所有属性。所以考虑到这一点,我想让我的配置文件在所有类中都可用。为此,我想扩展autoLoader类的所有类。这对我来说似乎合乎逻辑,但如果我错了,请纠正我。

我有两个班级

自动装载

Class AutoLoader {

    public $oConf = null;

    public function __construct($oConfig) {
        $this->$oConf = $oConfig;
    }

    public function getConf() {
        return $this->$oConf;
    }

}

其他班级

Class foo extends AutoLoader {

    public function bar() {
        var_dump($this->getConf());
    }

}

我的问题是,为什么var_dump为NULL。

这对我来说很奇怪因为这总是会让conf:

$autoLoader = new AutoLoader($array);
var_dump($autoLoader->getConf());

我在这里缺少什么。

3 个答案:

答案 0 :(得分:4)

您正在扩展和继承类结构,而不是对象实例
请以此代码为例:

$foo = new Foo('foo');
$bar = new Foo;

您是否希望$bar能够以某种方式访问​​传递给第一个对象的参数'foo'?不,扩展名没有改变。

您应该使用合成或依赖注入(例如,将自动加载器传递给Foo的构造函数)。不要Foo Autoloader,如果需要, Autoloader。扩展类时,新类 也是其父类。这意味着它可以用代替父类。在您使用Autoloader课程的任何地方,您都可以替换Foo。那有意义吗? Foo Autoloader吗? $foo instanceof Autoloader == true有道理吗?否。

答案 1 :(得分:1)

如果继承类有自己的构造函数,那么在这种情况下你可能没有将oConfig传递给父类(Autoloader)。

另外,你的构造函数需要一个配置。

所以如果你没有,你应该在你的子构造函数中执行此操作:

function __construct($oConfig) {
    parent::__construct($oConfig);
    // rest of your constructor code here
}

答案 2 :(得分:1)

您应该创建foo类的实例,并将构造变量提供给构造函数:

$config = 'My_config';
$foo = new foo($config);
$foo->bar();

将输出: (string) "My_config"