Here a meines Codes vereinfacht:Warum wird die Funktion in der übergeordneten Methode zweimal deklariert?
<?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();
Wie Sie in der Geige zu sehen, wirft es diesen Fehler:
Warning: Declaration of tags::index() should be compatible with questions::index($from = NULL) in /in/Y5KVq on line 29
Fatal error: Cannot redeclare myfunc() (previously declared in /in/Y5KVq:16) in /in/Y5KVq on line 16
Process exited with code 255
Warum? Natürlich sollte myfunc()
einmal deklariert werden. Seit test()
wird einmal aufgerufen. Also was sagt der Fehler?
Wie auch immer, wie kann ich es beheben?
Sie funktioniert nur erklären können einmal. Wenn Sie es dynamisch in Code deklarieren, der möglicherweise mehrmals ausgeführt wird, sollten Sie es in eine 'if (! Function_exists ('myfunc'))' Prüfung einbinden. – rickdenhaan
@rickdenhaan Ja, ich kann das tun, was du erwähnt hast. Aber ich möchte wissen, warum diese Funktion mehr als einmal ausgeführt wird? Wie wird der Code kompiliert? –