PHP在运行时更改父类?

时间:2014-04-03 14:49:48

标签: php

我有一个父类,它取决于是否实例化子类。

class GoogleApp {
    protected $auth_token;

    public function __construct($scopes) {
        $this->auth_token = $scopes;
    }
}

class Gmail extends GoogleApp {
    public function __construct() {
        print_r($this->auth_token);
    }
}

$googleApp = new GoogleApp('gmail'); // Change the actual class for all child instances
$gmail = new Gmail();

这个想法是所有的孩子都使用相同的auth_token(根据子类是否被使用而生成 - 截至目前,我只是手动将它们添加到我是否将它们包含在我的代码中)。由于我有很多子类(比如日历或驱动器),我是否必须将父项注入每个子实例或者是否有更简单的方法?

1 个答案:

答案 0 :(得分:0)

如果我理解你的要求,你就非常接近,你只需要将你的财产声明为静态。

class FooParent
{

    protected static $scope = null;

    public function __construct($scope)
    {
        self::$scope = $scope;
    }

    public function getScope()
    {
        return self::$scope;
    }

}

class FooChild extends FooParent
{
    public function __construct()
    {
        if (self::$scope === null) {
            throw new Exception('Must set scope first.');
        }
    }
}

$parent = new FooParent('foo');
$child = new FooChild();
echo $child->getScope(), "\n"; // prints "foo"