PHP类函数声明问题
我有一个关于函数重新声明的问题。因此,我尝试多次调用这个示例PHP类函数声明问题,php,object,Php,Object,我有一个关于函数重新声明的问题。因此,我尝试多次调用这个示例 class myClass { function abc() { function internal() { return "i am internal"; } return internal(); } } $myClass = new myClass(); echo $myClass->abc(); echo $myClass->a
class myClass {
function abc() {
function internal() {
return "i am internal";
}
return internal();
}
}
$myClass = new myClass();
echo $myClass->abc();
echo $myClass->abc(); // HERE IS THE PROBLEM when i call same function second time
PHP显示致命错误:无法重新声明内部()
有人知道我如何解决这个问题吗
提前感谢。您无法重新声明功能期,请尝试以下操作:
<?php
class myClass {
function abc() {
return $this->internal();
}
private function internal() {
return "i am internal";
}
}
?>
或者:
if (!function_exists('internal')) { function internal ... }
但是,您必须知道,在这种情况下,函数internal也将在类范围之外可用。劳伦斯的解决方案是一种更好的方法。在定义函数之前,先检查函数是否存在:
class myClass {
function abc() {
if ( ! function_exists('internal')) {
function internal() {
return "i am internal";
}
}
return internal();
}
}
当您使用
function()
声明函数时,您并没有在您认为是的范围内声明它。该函数是在类全局作用域中声明的,而不是在函数/类作用域中声明的
请参阅PHP文档:
因此,当您调用abc
时,您正在声明全局函数internal
如果你想做你正在做的事情,你可以改为使用(注意:这只适用于PHP5.3+)。这样做的好处是能够从abc
中读取局部变量(如果使用use
关键字)
您还可以将internal
声明为类的私有函数,尤其是在它不会更改的情况下。为什么我们一直在做一个函数
class myClass {
private function internal(){
return "i am internal";
}
function abc() {
return $this->internal();
}
}
不要在其他函数中定义函数,这是没有必要的。不要嵌套函数定义-没有必要这么做,这会导致类似的问题,如果您需要
internal
访问abc
的本地变量,那么使用Rocket的解决方案,这是一个糟糕的代码。否则你应该按照劳伦斯的建议去做。
class myClass {
private function internal(){
return "i am internal";
}
function abc() {
return $this->internal();
}
}