📜  为什么PHP 5.2+ 不允许抽象静态类方法?

📅  最后修改于: 2022-05-13 02:24:09.426000             🧑  作者: Mango

为什么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+ 不允许抽象静态类方法的原因。