Почему этот PHP программирует не, работают?

Я плохо знаком для PHP и узнавал о PHP функции от w3schools. Это сказало, что "PHP позволяет вызову функции быть сделанным, когда имя функции находится в переменной"

Эта программа работала

<?php
$v = "var_dump";
$v('foo');
?>

Но эта программа не работала:

<?php
$v = "echo";
$v('foo');
?>

Но если я делаю echo('foo'); работает.

Что я делаю неправильно?

5
задан Charles 9 February 2014 в 18:33
поделиться

4 ответа

Эта функция PHP называется Функции переменных .

Проблема здесь в echo , который не на самом деле функция, а языковая конструкция, и функции переменных могут только использоваться с функциями. В вашем первом примере var_dump была функцией, и она работала нормально.

Из документа PHP для функций переменных :

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

Вы можете использовать функцию printf вместо echo как:

$e = "printf"; // printf is a function not a language construct.
$e('foo');

или можете написать функцию-оболочку для echo как:

$e = "echo_wrapper";
$e('foo');

function echo_wrapper($input) { // wrapper function that uses echo.
        echo $input;
}
15
ответ дан 18 December 2019 в 10:42
поделиться

Есть две возможные проблемы, и вы должны решить их обе:

  1. Эта функция работает только в PHP 5.3, насколько я помню. Это самая новая основная версия, поэтому вам следует убедиться, что вы используете именно ее. Вполне вероятно, что это не так.
  2. echo - это не функция, а скорее конструкция языка PHP. Вам нужно написать функцию-обертку, которая повторяет то, что ей было передано.
0
ответ дан 18 December 2019 в 10:42
поделиться

echo не является функцией! Вы можете использовать printf , который является функцией, и ее можно использовать для распечатки чего-либо.

1
ответ дан 18 December 2019 в 10:42
поделиться

Это работает:

$v = "printf";
$v('foo');
0
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: