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();
    }
}