代码之家  ›  专栏  ›  技术社区  ›  Mark Tomlin

从声明自己的foo的扩展类调用foo的第一个声明

  •  0
  • Mark Tomlin  · 技术社区  · 15 年前
    <?php
    class a {
        public function foo() {
            echo __METHOD__ . PHP_EOL;
        }
    }
    class b extends a {
        public function foo() {
            $this->foo(); # I want to call a's foo method here.
            echo __METHOD__ . PHP_EOL;
        }
    }
    class c extends a {
        public function foo() {
            echo __METHOD__ . PHP_EOL;
            $this->foo(); # I want to call a's foo method here.
        }
    }
    class d extends a {
        # This class does not handle anything super special in our foo step, so I don't over write a's foo();
    }
    $a = new a; $a->foo();
    $b = new b; $b->foo();
    $c = new c; $c->foo();
    $d = new d; $d->foo();
    ?>
    

    我敢肯定你们中有一些人在挠头,想弄明白为什么我会想做这样的事情,所以我向你们保证这是有意义的,让我解释一下。

    我有一个函数,它本身工作得很好,我有一些其他的类,它们扩展到基类上,向它添加一些函数,这些类执行相同的任务,但在不同的上下文中或具有附加信息,因此它们必须执行父类的所有步骤,但它们必须在某些情况下也要做一些特殊的子集合。

    有没有办法我仍然可以执行一个的foo方法和我的子类foo方法?

    我知道我可以通过一些可怕的黑客程序来解决这个问题,比如将方法设为一个文件,然后在需要的时候将该文件包含在父函数和它的兄弟函数中,或者我可以创建第二个名为bar()的方法,该方法包含foo()的指令,并让我的子类覆盖foo(),但是当需要foo()的功能时调用bar()。我只是想知道我是否可以在不使用一些非常有趣的黑客的情况下做到这一点,这里有人能教我一些我不知道的关于PHP的东西吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Gordon Haim Evgi    15 年前

    public function bar(){
      return parent::foo();
    }
    

    Example 3 in the PHP Manual on Scope Resolution

    推荐文章