PHP:多态抽象静态方法

发布于 2024-10-06 08:44:04 字数 188 浏览 3 评论 0原文

我正在尝试做这样的事情,但我没有成功。

abstract class Animal 
{ 
    abstract static function getName();
    static function sayName() { echo self::getName(); }
}

谢谢!

I'm trying to do something like this but i don't succeed.

abstract class Animal 
{ 
    abstract static function getName();
    static function sayName() { echo self::getName(); }
}

thanks!

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

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

发布评论

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

评论(4

墨小墨 2024-10-13 08:44:04

你有两个问题:

  1. 静态函数在 php 中不能再是抽象的。
  2. 如前所述,后期静态绑定:由于 getName() 方法是在子类中定义的,因此您需要使用 static::getName() 而不是 self::getName() 来访问它

You have two problems:

  1. static functions can't be abstact in php anymore.
  2. As said before, late static binding: as method getName() is defined in child class, you need to access it with static::getName() instead of self::getName()
世界等同你 2024-10-13 08:44:04

如果您能够提示如何您“没有成功”,那就太好了,但我想您在静态绑定中遇到了困难并且需要使用 PHP 5.3 中引入的最新静态绑定

It would have been nice if you'd have given a hint as to how you "don't succeed", but I suppose you're stumbling across static bindings and need to use late static bindings introduced in PHP 5.3.

泅渡 2024-10-13 08:44:04

我的猜测是您可能正在尝试实例化该类中的一个对象。

不能。它是一个抽象类。将其子类化,然后实例化它。

My guess is maybe you are trying to instantiate an object from that class.

You can't. It is an abstract class. Subclass it, and then instantiate that.

淡看悲欢离合 2024-10-13 08:44:04

那不会成功——你不能有一个抽象的静态函数。请参阅已接受的答案 为什么 PHP 5.2+ 不允许抽象静态类方法? 了解原因的详细信息。

That will not succeed- you cannot have an abstract static function. See the accepted answer Why does PHP 5.2+ disallow abstract static class methods? for details on why.

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