Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从函数中调用函数_Php - Fatal编程技术网

Php 从函数中调用函数

Php 从函数中调用函数,php,Php,我的班级结构如下: class SomeClass { function execute() { $value = getValue(); } function RegisterCallbackHandlers() { function ajaxCall() { $value = getValue(); } } } 函数getValue对它调用的两个实例都执

我的班级结构如下:

class SomeClass
{
    function execute()
    {
        $value = getValue();
    }

    function RegisterCallbackHandlers()
    {
        function ajaxCall()
        {
            $value = getValue();
        }
    }
}
函数getValue对它调用的两个实例都执行相同的操作,但我一次只能让它为一个实例工作。当我把它放在执行中时,它在那里工作。当我把它放在注册表调用backhandlers中时,它适用于ajaxCall


我必须把它放在哪里,以便在从ajaxCall和从execute调用时它可以工作?

当您在函数中声明函数时,此函数不会被封装

因此,
ajaxCall
是一个全局函数,您可以在任何地方调用,最重要的是,您不能重新声明它

事实上,如果你这样做:

$s = new SomeClass();
$s->RegisterCallbackHandlers();
$s->RegisterCallbackHandlers();
你有

致命错误:无法重新声明ajaxCall()


因此,您应该只调用一次
RegisterCallbackHandlers
,这样就不需要在其他任何地方进行任何其他声明。

我将getValue函数放在RegisterCallbackHandlers函数中,并在execute函数中调用它,如下所示:

SomeClass::RegisterCallbackHandlers();
$value = getValue($somNumber);

不要在函数中定义函数——如果第二次调用父函数,将出现致命错误“无法重新声明…”执行函数在pageload上执行,RegisterCallbackHandlers函数包含用于来自页面的ajaxcalls调用的函数,这是在我使用的框架上。RegisterCallbackHandler永远不会被调用两次,包含的函数只用于ajaxcalls。这只是一个示例。如果一次调用
RegisterCallbackHandlers
,则不需要重新声明
ajaxCall
函数,因为它已经声明了