从子类中调用函数

时间:2018-02-12 09:03:51

标签: php oop inheritance

鉴于我有一个抽象类:

abstract class User{

  private function getNumber(){

      return 'Get number';
  }
}

使用子类

class UserComments extends User{


   public function rows(){
    return $this->getNumberOfRows();
 }
}

问题:

当我尝试在子类中调用getNumber方法时,或者当我在子类中调用getNumberOfRows我想要getNumberOfRows()时,有没有办法调用getNumber函数被称为 ?

3 个答案:

答案 0 :(得分:1)

由于PHP Object inheritance,您可以直接调用特定方法。但是,在您的示例中,缺少getNumberOfRows()函数。

class UserComments extends User {

   public function rows() {
      return $this->getNumber();
   }
}

答案 1 :(得分:1)

你可以做这样的事情

abstract class User{

  private function getNumber(){

      return 'Get number';
  }

  public function getNumberOfRows(){

      return $this->getNumber();
  }
}

使用子类

class UserComments extends User{

   public function rows(){

      return $this->getNumberOfRows(); //Defined in the parent class
   }
}

答案 2 :(得分:1)

抽象方法不能是私有的,抽象方法必须由派生它的类实现。

您可以使用public,或者如果您不希望它在外面可见,请将其设为protected,如下所示:

abstract class User{
    abstract protected function getNumber();
}

执行此操作后,您可以在getNumber课程中实施User方法:

class User {
    protected function getNumber() {
        // Do something
    }
}

更新:请注意,子类可以访问受保护的方法,您可以使用"层次结构":

abstract class User{
    abstract protected function getNumber();
}

class UserComment extends User {

    protected function comment() {
        // Do something
    }

    protected function getNumber() {
        return 3;
    }

}

class Post extends UserComment {

    public function myMethod() {
        echo $this->getNumber();
    }

}

您也可以使用interfaces,只是一个例子:

interface User {
    public function getNumber();
}

class UserComment {
    protected function myMethod() {
        // Do something
    }
}

class Post extends UserComment implements User {

    final public function getNumber() {
        return 3;
    }

    public function myMethod() {
        echo $this->getNumber();
    }
}

$post = new Post();
$post->myMethod();