2014-10-07 6 views
1

Я пытаюсь понять, почему PHP documentation for variable functions утверждает, что:PHP Переменные Функции и язык конструирует

Переменные функции не будут работать с такими языковыми конструкциями, как эхо, печать, снята с охраны(), Исеть(), empty(), include, require и тому подобное. Используйте функции обертки, чтобы использовать любую из этих конструкций как переменные функции .

я попробовал некоторые из них, и они прекрасно работают:

function animal() { 

    return 'Monkey'; 

} 

$animal = 'animal'; 

echo $animal(); 

возвращается Monkey - так же, как можно было бы ожидать.

Тот же результат с print конструкции - тогда я попробовал unset() и он также работает абсолютно нормально:

function getIndex() { 

    return 0; 

} 

$index = 'getIndex'; 

$array = array(

    'Monkey', 
    'Gorilla' 

); 

unset($array[$index()]); 

print_r($array); 

это возвращает Array ([1] => Gorilla).

Есть ли что-то, что мне не хватает здесь? Просто добавьте - я использую PHP 5.5.14.

+0

что вы ожидали? –

+1

Попробуйте '$ function = 'echo'; $ function ('Hello World'); ' –

+0

Я думаю, что понял. Первоначально я думал, что вы не сможете использовать эти конструкции с переменной функцией, но я считаю, что они просто ссылаются на то, что вы не можете объявить переменную с 'echo' ($ echoVariable = 'echo') и называть его функцией: $ echoVariable(). –

ответ

2

Вы не используете какие-либо языковые конструкции в качестве переменной функции:

Но попробуйте

$function = 'echo'; 
$function('Hello World'); 

и он не будет работать, точно так, как описано в документации

Используйте функцию обертки вокруг эхо, как описано в руководстве, а затем вы можете использовать эту функцию в качестве переменной функции

function myecho($value) { 
    echo $value; 
} 

$function = 'myecho'; 
$function('Hello World'); 
+0

Thanks Mark - странно, как иногда ваш мозг зависает :) –

+0

Мозг зависания может случиться с кем угодно –

2

Они означают другое использование:

<?php 
$var = "some variable"; 
$a = "unset"; //also print, isset, echo, include 

// you cannot do this: 
$a($var); 

Конечно, вы можете уничтожить или переменной печати с именем функции строки, содержащей ...

(Или я что-то отсутствует? :))

+0

Это именно то, что я понял через минуту после того, как я разместил этот билет :) Спасибо Майку. –

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