聘我网

新概念招聘3.0

PHP真的支持多态吗?

vote up0vote downstar

假设基类base和子类son都有一个方法m1

而且基类有另一个方法m2

base::m2中如何使$this->method_1能够始终指向base::m1,不论调用时$this到底是base亦或son的实例?

 

2 个答复

vote up1vote downcheck

你想做的应该是类似这样的事情:

<?php

class base {
  public function m1() {
    echo "base:m1\n";
  }
  public function m2() {
    if(get_class($this) == 'base') {
      $this->m1();
    }
    else {
      parent::m1();
    }
    echo "base:m2\n";
  }
}



class son extends base {
  public function m1() {
    echo "son:m1\n";
  }
}


$obj = new son();

$obj->m2();

但是NOPHP并不真的支持多态,会报这样的错误:

PHP Fatal error:  Cannot access parent:: when current class scope has no parent
链接
vote up1vote down

可以这样work around:

if (get_parent_class($this) === FALSE) {
  $this->m1();
} else {
  call_user_func(array(get_parent_class($this), 'm1'));
}
链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.