首页 > 解决方案 > OOP 方法覆盖

问题描述

有没有办法在父类中获取 foo 方法的返回值?在下面的代码中,我得到“b”,我的目标是在不更改方法名称和不使用的情况下得到“a”return (new a () -> foo ());

interface i {
      function foo();
    }

    class a implements i {
      public function foo() {
        return 'a';
      }

      public function foo1() {
       // return (new a()->foo()); 
        return $this->foo();
      }
    }

    class b extends a  {
      public function get() {
        return parent::foo1();
      }

      public function foo() {
        return 'b';
      }
    }

    $b=new b();
    $b->get(); //return b

更新:例如,目标是从另一个第三类访问父类中的 foo 方法

    class c {
      public function __construct(i $b)
  {
    $this->b = $b;
  }

public function get() {
  $this->b->foo1();
}
    }

标签: phpoopoverriding

解决方案


我不确定-就像@arkascha一样-实际目标是什么。这是另一种可能的含义(显式通过方法 foo1):

<?php

interface i {
  function foo();
}

class a implements i {
  public function foo() {
    return 'a';
  }

  public function foo1() {
   // here the 'self' is the trick instead of $this (and the only change to your code)
      return self::foo();
  }
}

class b extends a  {
  public function get() {
    return parent::foo1();
  }

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

$b=new b();
echo $b->get(); //returns a

推荐阅读