PHP 可以做相当简单的继承事情吗?

发布于 2024-07-09 14:33:14 字数 505 浏览 8 评论 0原文

我有以下代码:

abstract class AbstractParent {
 function __construct($param) { print_r($param); }
 public static function test() { return new self(1234); }
}

class SpecificClass extends AbstractParent {}

当我调用 SpecificClass::test() 时,我收到错误:

Fatal error: Cannot instantiate abstract class AbstractParent

所以我基本上想要的只是让 AbstractParenttest() 实例化调用此 test() 的类(因此,在我的示例中,实例化 SpecificClass)。

I have the following code:

abstract class AbstractParent {
 function __construct($param) { print_r($param); }
 public static function test() { return new self(1234); }
}

class SpecificClass extends AbstractParent {}

When I invoke SpecificClass::test(), I am getting an error:

Fatal error: Cannot instantiate abstract class AbstractParent

So what I basically want is just to let AbstractParent's test() instantiate class where this test() was called from (so, in my example, instantiate SpecificClass).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

像极了他 2024-07-16 14:33:14

之前版本 5.3 仅具有以下解决方法:

abstract class AbstractParent {
 function __construct($param) { print_r($param); }
 abstract public static function test();
 private static function test2($classname) { return new $classname(1234); }
}

class SpecificClass extends AbstractParent {
 public static function test() {return self::test2(__CLASS__);}
}

Prior version 5.3 Only with the following work around:

abstract class AbstractParent {
 function __construct($param) { print_r($param); }
 abstract public static function test();
 private static function test2($classname) { return new $classname(1234); }
}

class SpecificClass extends AbstractParent {
 public static function test() {return self::test2(__CLASS__);}
}
久夏青 2024-07-16 14:33:14

您可以在 PHP 5.3 中执行此操作,该版本仍处于 alpha 版本。 您正在寻找的称为“后期静态绑定”。 您希望父类在静态方法中引用子类。 你还不能做到这一点,但它即将到来......

编辑:你可以在这里找到更多信息 - http://www.php.net/manual/en/language.oop5.late-static-bindings.php

You can do it in PHP 5.3, which is still in alpha. What you're looking for is called Late-Static-Binding. You want the parent class to refer to the child class in a static method. You can't do it yet, but it's coming...

Edit: You can find more info here - http://www.php.net/manual/en/language.oop5.late-static-bindings.php

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文