Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php OOP方法重写_Php_Oop_Overriding - Fatal编程技术网

Php OOP方法重写

Php OOP方法重写,php,oop,overriding,Php,Oop,Overriding,有没有办法在父类中获取foo方法的返回值?在下面的代码中,我得到了b,我的目标是在不更改方法名称的情况下得到a,并且不使用returnnewa->foo 更新:例如,目标是从另一个第三个类访问父类中的foo方法 class c { public function __construct(i $b) { $this->b = $b; } public function get() { $this->b->foo1(); } }

有没有办法在父类中获取foo方法的返回值?在下面的代码中,我得到了b,我的目标是在不更改方法名称的情况下得到a,并且不使用returnnewa->foo

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

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

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

您询问是否可以通过调用类型为b的对象的方法来获取a::foo的返回值,即“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

而不是调用

public function get() {
    return parent::foo1();
}
像这样使用父对象调用方法foo

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

结果你会得到a,我不确定——就像@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
在子类中调用parent::foo以直接访问parent foo方法

返回self::foo;公共职能部门1{
<?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