2013-12-11 40 views
0

我有以下的类结构:调用一个函数中的函数

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

    function RegisterCallbackHandlers() 
    { 
     function ajaxCall() 
     { 
      $value = getValue(); 
     } 
    } 
} 

功能的getValue确实为这两种情况下,它被称为了,但我只能得到它的一个工作同一次。当我把它放在执行它在那里工作。当我把它放在RegisterCallbackHandlers它适用于ajaxCall

我在哪里必须把它因此从AjaxCall的打来电话,从执行时,它的工作?

+2

不要在函数中定义一个函数 - 如果你打电话执行功能的页面加载执行父功能的第二次,你会得到致命错误“无法重新声明......” – MichaelRushton

+0

,在RegisterCallbackHandlers函数包含用于AjaxCalls的从页面的功能,这是一个框架,我使用。 – nhalink

回答

0

我把的getValue功能在RegisterCallbackHandlers功能,并在它调用execute功能是这样的:

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

当你在一个函数内部声明一个函数时,这个函数不会被封装。

因此,ajaxCall是一个全局函数,您可以随处调用,最重要的是,您不能重新声明它。

事实上,如果你做这样的一些感受:

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

你有

Fatal error: Cannot redeclare ajaxCall()

所以,你应该叫RegisterCallbackHandlers只有一次,那么你不需要有任何其他声明其他地方。

+0

RegisterCallbackHandlers将永远不会被调用两次,含功能仅用于AjaxCalls的。 – nhalink

+0

这只是一个例子。如果您一次调用'RegisterCallbackHandlers',则不需要重新声明'ajaxCall'函数,因为它已经声明 –