为什么PHP 5.2+ 不允许抽象静态类方法?
在我们回答这个问题之前,您必须清楚地定义什么是抽象类、抽象方法和静态方法。
抽象类:在面向对象编程范式中,抽象是指隐藏任何程序的内部实现细节,只向用户展示程序的功能的过程。抽象类是实现这一目标的一种方式。抽象类是任何不能被实例化(即不能创建对象)并且必须扩展(继承)以创建对象的类。 'abstract' 关键字用于创建抽象类。
抽象方法:抽象方法是一种只能声明而不能定义的方法。它在继承自此类的类中定义。
静态方法:任何类的静态方法都是只创建一次的方法。这意味着即使您使用静态方法创建了一个类的数百个对象,每个静态方法也会有唯一的副本。
考虑以下示例:
abstract class Abstract_Parent {
static function X() {
self::Y();
}
abstract static function Y();
}
class Child extends Abstract_Parent {
static function Y() {
echo "GeeksforGeeks";
}
}
Child::X();
现在,如果您运行此PHP代码,您将看到错误“ PHP致命错误:无法调用抽象方法 Abstract_Parent::X()” 。
当我们在子类中调用方法 X() 时,父类中的静态函数X() 被调用。在方法 X() 中,我们再次调用函数Y(),它是一个抽象静态函数。函数X() 试图调用的 Y() 是父类 Y(),它本身就是一个抽象函数。
因此,在同一方法上使用抽象和静态会破坏彼此的目的。这就是PHP 5.2+ 不允许抽象静态类方法的原因。