【问题标题】:Are there pure virtual functions in PHP like with C++PHP中是否有像C++那样的纯虚函数
【发布时间】:2011-11-27 21:12:20
【问题描述】:

我原以为很多人会想知道这是否可能,但我找不到任何重复的问题...请纠正我。

我只想知道 PHP 是否提供纯虚函数。我想要以下

class Parent {
   // no implementation given
   public function foo() {
      // nothing 
   }
}

class Child extends Parent {
   public function foo() {
      // implementation of foo goes here
   }
}

非常感谢。

【问题讨论】:

    标签: php pure-virtual


    【解决方案1】:

    是的,这种类型的解决方案是可能的,它被称为多态,你可以在不声明抽象类或接口的情况下做到这一点。

    【讨论】:

    • 在不将方法声明为抽象的情况下创建空方法(如问题中所示)不反映 C++ 纯虚拟方法行为(与 PHP 中的抽象方法相同)。
    • 这是世界上最好的答案。我希望有一天当我的​​孩子长大后,我可以向他们展示这个答案,他们也能像我现在一样留下深刻的印象。一代又一代的程序员因此而变得更好,您可能单枪匹马地在这里挽救了数百万人的生命——干得好,先生,干得好。有一个 +1。
    【解决方案2】:

    在父类中将方法声明为抽象:

    abstract public function foo();
    

    【讨论】:

      【解决方案3】:

      您可以创建抽象函数,但您也需要将父类声明为抽象:

      abstract class Parent {
         // no implementation given
         abstract public function foo();
      }
      
      class Child extends Parent {
         public function foo() {
            // implementation of foo goes here
         }
      }
      

      【讨论】:

      • 纯虚函数需要在子类中定义。如果不应该发生错误。如果 foo() 未定义,是否会发生错误。这是关键。
      • 是的,如果你扩展Parent但没有定义foo你会得到一个错误(除非你的子类也是抽象的,在这种情况下它不能被实例化并且任何非抽象的子类必须自己定义foo)。有关详细信息,请参阅the PHP manual,其中声明“所有在父类声明中标记为抽象的方法都必须由子定义”。
      • 当一个类被声明为abstract是否意味着它的所有函数都必须是abstract(即pure virtual),或者你可以创建虚函数和最终函数(我的意思是函数不是前面加上 abstract 关键字)?
      • @Silidrone 抽象类可能具有抽象或具体功能。有关详细信息,请参阅the docs
      【解决方案4】:

      abstract classes

      abstract class Parent {
         // no implementation given
         abstract public function foo();
         }
      }
      
      class Child extends Parent {
         public function foo() {
            // implementation of foo goes here
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 2014-01-18
        • 2010-11-07
        • 2016-07-22
        相关资源
        最近更新 更多