我有一个父类,它取决于是否实例化子类。
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(根据子类是否被使用而生成 - 截至目前,我只是手动将它们添加到我是否将它们包含在我的代码中)。由于我有很多子类(比如日历或驱动器),我是否必须将父项注入每个子实例或者是否有更简单的方法?
答案 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"