OOP方法覆盖

时间:2018-10-13 08:18:58

标签: php oop override

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

的情况下获得“ a”
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();
}
    }

4 个答案:

答案 0 :(得分:1)

我不确定-就像@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

答案 1 :(得分:0)

您询问是否可以通过调用类型为a::foo()的对象的方法来获得b的返回值,即'a'。除非我完全想念您正在尝试做的事情,否则这应该很简单:

<?php
interface i {
    function foo();
}

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

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

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

}

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

这是因为您明确地调用parent::foo(),显然可以解决a::foo()

答案 2 :(得分:0)

而不是呼叫

public function get() {
    return parent::foo1();
}

像这样使用父级调用方法foo

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

您将得到一个结果

答案 3 :(得分:0)

在子类中调用parent::foo()可以直接访问父foo()方法!