2015-04-28 2 views
6

Я пытаюсь написать некоторые вложенные функции анонимного PHP, структура - это тот, который вы видите ниже, и мой вопрос: как я могу заставить его работать без ошибок?Вложенные функции анонима

$abc = function($code){ 

    $function_A = function($code){ 
     return $code; 
    }; 

    $function_B = function($code){ 
     global $function_A; 
     $text = $function_A($code); 
     return $text; 
    }; 

    $function_B($code); 

}; 

echo $abc('abc'); 

Выход Фатальная ошибка: Имя функции должно быть строкой в этой строке:

$text = $function_A($code); 

Это сообщение не говорит мне ничего :(

+1

'$ function_A' не определен в глобальном масштабе. – AbraCadaver

+1

'$ function_A' определяется в области локальной переменной внешней функции, а не как глобальная. См. Также [Ссылка: что такое переменная область, какие переменные доступны из того, где и какие ошибки «неопределенной переменной»?] (Http://stackoverflow.com/q/16959576) – mario

ответ

10

Дело здесь что ваш $function_A не определен в глобальной области, но в области $abc. Если вы хотите, вы можете попробовать использовать use, чтобы передать $function_A в объем вашего $function_B:

$abc = function($code){ 

    $function_A = function($code){ 
     return $code; 
    }; 

    $function_B = function($code) use ($function_A){ 
     $text = $function_A($code); 
     return $text; 
    }; 

    $function_B($code); 

}; 
2

В PHP, чтобы передать другим, чем $this переменных и суперглобальные в анонимное закрытие вы должны использовать use заявление.

<?php 

$abc = function($code){ 

    $function_A = function($code){ 
     return "Code: {$code}"; 
    }; 

    $function_B = function($code) use ($function_A) { 
     $text = $function_A($code); 
     return $text; 
    }; 

    return $function_B($code); 
}; 

echo $abc('abc'); 

Вот рабочий пример: http://3v4l.org/u1CtZ

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