【问题标题】:PHP class inheritance depthPHP类继承深度
【发布时间】:2011-01-26 23:02:16
【问题描述】:

我正试图弄清楚继承到底有多深。

例如,如果我从 A 类开始

B 类扩展 A 类
C 类扩展 B 类
D 类扩展 C 类
E 类扩展 D 类
F 类扩展 E 类
G 类扩展 F 类

大多数较低级别是抽象类,其方法填充有代码和抽象方法。它是一个相当大而复杂的结构。 (做我的头)

G 类是否仍然能够访问 A 类的方法和参数,以及仍然可以访问 A 类的抽象方法?

我之所以问,是因为 Eclipse 没有将低级方法添加到自动完成中时遇到了问题。我想知道这是否真的有限制,或者是否只是 eclipse 达到了代码完成的最大值。

我还远未达到可以用我已完成的工作进行测试的阶段,并且不想在完成后发现按顺序定义的方法无法访问。

【问题讨论】:

    标签: php eclipse class-design


    【解决方案1】:

    听起来你的编辑器有问题。例如,请看下面的快速演示:

    php > class a { function foo() { echo "A::foo()\n"; } }
    php > $letters = range('a', 'z');
    php > for ($i = 0; $i < 25; $i++) { eval("class {$letters[$i+1]} extends {$letters[$i]} {}"); }
    php > $z = new z;
    php > $z->foo();
    A::foo()
    

    PHP 不会对您施加任何类似的限制。

    【讨论】:

      【解决方案2】:

      像这样使用canonical test

      <?php
      abstract class A {
          abstract function getValue();
      }
      abstract class B extends A{ }
      abstract class C extends B{ }
      abstract class D extends C{ }
      abstract class E extends D{ }
      abstract class F extends E{ }
      class G extends F{
      
      }
      ?>
      

      可能会出现致命错误,因为G 实际上并没有实现A 中定义的抽象方法。从上面的链接可以看出,其实是这样的。

      因此,虽然这是一种深度继承,但它低于 PHP 的任何限制(如果有的话)。相反,您可能会在 PDT 中遇到索引器问题。

      【讨论】:

      • 非常感谢。我怀疑这是问题,但我只是不确定。我也很想知道这个结构是否存在实际限制。
      • 我认为“继承级别”没有明确的限制。这并不像您需要将所有父类放在可能溢出或其他东西的堆栈上。如果有的话,加载所有父类的必要性意味着脚本可用的内存是实际的限制。
      【解决方案3】:

      以下php:

      class A
      {
          public function FooA()
          {
              echo "A!!";
          }
      }
      
      class B extends A
      {
          public function FooB()
          {
              echo "B!!";
          }
      }
      
      class C extends B
      {
          public function FooC()
          {
              parent::FooB();
              parent::FooA();
          }
      }
      
      $test = new C();
      $test->FooC();
      

      打印:

      B!!A!!

      我在 50 的深度测试了它,它仍然运行良好,所以你肯定可以,听起来你的编辑器插件在继承树中看起来很深

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多