继承类上的PHP new self()正在创建一个基类对象

时间:2016-05-17 09:14:39

标签: php inheritance

我有一个充当基类的类。然后我有几个继承它的类。我想开始使用静态语法加载继承的类,但行为没有多大意义。

直到现在我加载了这样的类,它完成了这项工作。

$obj = new foo();
$something = $obj->ByID(1);

我希望能够像这样调用ByID函数。

$something = foo::Get()->ByID(1);

上面的代码正在运行,但它没有调用继承的类,它正在加载基类。我想我可以看出为什么会这样,但它没有任何意义。在.NET中,“this”将始终适用于继承的对象,但它在这里对我不起作用。

我有一个基类栏,使用以下方法。这不会在继承的类中被覆盖。实际上,继承的类只包含1个单独的属性。

class bar
{
    public $directory;
    public function Get()
    {
        return new self();
    }

    public function ByID($id)
    {   
        //get the record from the file by using $directory to find the file.
    } 
}

class foo extends bar
{
    public $directory = "/something/";
}

我遇到的问题是,当我以静态方式加载类时,self()返回基类的对象而不是继承的类。我需要继承类的$directory属性。继承的类当然会包含其他函数和其他东西,但是现在这是阻止我实现这样的代码的障碍。知道我做错了吗?

我不想在每个继承的类中重写Get()。使用laravel,我可以记住具有类似结构的模型类,您可以创建一个具有1个属性的模型,该属性是表的名称,并且不知何故它都工作正常。

1 个答案:

答案 0 :(得分:3)

改为使用静态绑定。

public static function Get() {
    return new static();
}