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()返回的是基类的对象,而不是继承的类。我需要继承类的
我不想在每个继承类中重写get()。有了Laravel,我还记得Model类有一个类似的结构,您可以创建一个具有1个属性的模型,该属性是表的名称,并且在某种程度上工作得很好。
请改用静态绑定。
1 2 3 | public static function Get() { return new static(); } |