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

PHP new self() on inherited class is creating a base class object

本问题已经有最佳答案,请猛点这里访问。

我有一个班是基础班。然后我还有几个继承自它的类。我想开始使用静态语法加载继承的类,但这种行为没有多大意义。

直到现在,我都是这样上的课,它完成了任务。

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

我想能够这样调用byid函数。

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

上面的代码正在工作,但它没有调用继承的类,而是在加载基类。我想我能理解为什么会发生这种事,但这没有任何意义。在.NET中,"this"将始终应用于继承的对象,但在这里它不以这种方式工作。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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,我还记得Model类有一个类似的结构,您可以创建一个具有1个属性的模型,该属性是表的名称,并且在某种程度上工作得很好。


请改用静态绑定。

1
2
3
public static function Get() {
    return new static();
}