Можно ли расширить вызов функции в строке PHP? - PullRequest
3 голосов
/ 29 сентября 2010

Я пытался вызвать foo() внутри строки, например:

echo "This is a ${foo()} car";

function foo() {
    return "blue";
}

но в результате возникает синтаксическая ошибка.

Я нашел здесь что-то похожее, но не совсем то, что мне нужно:

echo "This is the value of the var named by the return value of getName(): {${getName()}}";

Возможно ли это сделать?

Ответы [ 8 ]

8 голосов
/ 29 сентября 2010

Возможно ли это?

Функции, вызовы методов, статические переменные класса и константы класса внутри {$} работают с PHP 5. Однако доступ к значению будет интерпретироваться как имя переменной в области видимости вкакая строка определена.Использование одиночных фигурных скобок ({}) не будет работать для доступа к возвращаемым значениям функций или методов или значениям констант класса или статических переменных класса.

Это первое примечание для фигурного синтаксиса на http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex.

3 голосов
/ 29 сентября 2010

Не так, нет ... вы могли бы:

echo "$(" . foo() . ");";
2 голосов
/ 29 сентября 2010

Нет, насколько я знаю, вы можете сделать только:

echo "hello ".foo();

function foo() {
    return "world";
}

В вашем примере это будет работать:

$name = "captaintokyo";
echo "This is the value of the var named by the return value of getName(): {${getName()}}";

function getName()
{
    return "name";
}

// Output:
// This is the value of the var named by the return value of getName(): captaintokyo
1 голос
/ 16 мая 2013

Да, это возможно.

$func = function($param) { return $param; };
function foo($color) { return "$color car"; }

echo "This is a {$func(foo('blue'))}<br/>";

$title = 'blue car';
echo "This is a {$func(str_replace('blue', 'red', $title))}<br/>";

$ func () будет вызываться как функция, а выражение в скобках будет оцениваться как любой другой код PHP. Таким образом, вы можете напрямую вызывать практически любую функцию внутри строки.

0 голосов
/ 29 сентября 2010

Пример, который вы дали:

function foo() {return "hello";}
echo "${foo()}";

Этот пример не будет работать, потому что использование функций в формате PHP {$} позволяет получить доступ к результату только как имя переменной, а затем показать содержимое этогопеременная.

В вашем примере оператор echo будет пытаться отобразить содержимое переменной с именем $hello.

Чтобы понять, почему она не работает, нам нужноизмените пример:

function foo() {return "hello";}
$hello="world";
echo "${foo()}";

Эта программа напечатает world.Кажется, это то, что вы нашли во втором примере, который вы дали.

Если вы надеетесь получить программу, которая будет печатать hello в вашем примере, вы не сможете это сделать.это с помощью этой техники.Хорошая новость заключается в том, что существует множество более простых способов сделать это.Просто подтвердите возвращаемое значение функции.

0 голосов
/ 29 сентября 2010

Оберните $ в одинарные кавычки, чтобы он не был для меня буквальным, и используйте конкатенацию для добавления значения foo

echo '$' . foo();

function foo() {
    return "hello";
}

отпечатков: $hello

0 голосов
/ 29 сентября 2010

Вы могли бы также сделать это:

echo foo ();

0 голосов
/ 29 сентября 2010

$ {} синтаксис выглядит как подстановка команд оболочки, для PHP вы можете использовать eval, http://php.net/eval

Но имейте в виду, что eval - это зло ... Вы должны быть уверены, что знаете, что передаете eval.

Назовите это так:

<?php echo eval("foo();");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...