2013-12-11 10 views
0

У меня есть следующий класс-структуры:вызов функции из функции

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

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

Функция ПолучитьЗначение делает то же самое для обоих случаях это призыв к но я могу только заставить его работать на один в время. Когда я положил его в выполнить, он там работает. Когда я положил его в RegisterCallbackHandlers работает для ajaxCall.

Где я должен поставить его так, что это будет работать при вызове из ajaxCall и от выполнить?

+2

Не определить функцию внутри функции - если вы звоните родительская функция во второй раз вы получите фатальную ошибку «Can not redeclare ...» – MichaelRushton

+0

функция выполнения выполняется в pageload, функция RegisterCallbackHandlers содержит функции, которые используются для ajaxcalls со страницы, это используется в используемой структуре. – nhalink

ответ

0

Я поместил функцию ПолучитьЗначения в RegisterCallbackHandlers функцию и вызвать в ней в выполнить функцию следующим образом:

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', потому что она уже объявлена –

Смежные вопросы