【发布时间】:2017-07-02 20:01:57
【问题描述】:
Here 是我的代码的简化:
<?php
class questions {
public function index( $from = null ) {
if ( $from != 'test' ) {
return $this->test();
}
return 'sth';
}
public function test(){
function myfunc(){}
return $this->index(__FUNCTION__);
}
}
class tags extends questions {
public function index () {
return parent::index();
}
}
$obj = new tags;
echo $obj->index();
正如你在小提琴中看到的,它抛出了这个错误:
警告:tags::index() 的声明应该与第 29 行 /in/Y5KVq 中的 questions::index($from = NULL) 兼容
致命错误:无法在第 16 行的 /in/Y5KVq 中重新声明 myfunc()(之前在 /in/Y5KVq:16 中声明)
进程以代码 255 退出
为什么?当然myfunc() 应该声明一次。因为test() 将被调用一次。那么错误说明了什么?
无论如何,我该如何解决?
【问题讨论】:
-
函数只能声明一次。如果您要在可能多次运行的代码中动态声明它,则应将其包装在
if (!function_exists('myfunc'))检查中。 -
@rickdenhaan 是的,我可以做你提到的检查。但我想知道为什么该函数会被多次执行?代码将如何编译?
标签: php function class oop inheritance