Вызов функций PHP в строках HEREDOC - PullRequest
85 голосов
/ 19 сентября 2008

В PHP строковые объявления HEREDOC действительно полезны для вывода блока html. Вы можете анализировать переменные, просто ставя перед ними префикс $, но для более сложного синтаксиса (например, $ var [2] [3]) вы должны поместить выражение в фигурные скобки {}.

В PHP 5 возможно на самом деле сделать вызовы функций в {} фигурных скобках внутри строки HEREDOC, но вам придется проделать небольшую работу. Само имя функции должно храниться в переменной, и вы должны вызывать его, как если бы это была функция с динамическим именем. Например:

$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;

Как видите, это немного более грязно, чем просто:

$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;

Есть и другие способы, кроме первого примера кода, такие как выход из HEREDOC для вызова функции или решение проблемы и выполнение чего-то вроде:

?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>

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

Итак, суть моего вопроса: есть ли более элегантный способ подойти к этому?

Редактирование, основанное на ответах: Конечно, кажется, что какой-то шаблонизатор сделает мою жизнь намного проще, но это потребует от меня инверсии моего обычного стиля PHP. Не то чтобы это плохо, но это объясняет мою инерцию ... Я готов выяснить способы облегчения жизни, поэтому сейчас я ищу шаблоны.

Ответы [ 16 ]

2 голосов
/ 23 сентября 2013

вы забываете о лямбда-функции:

$or=function($c,$t,$f){return$c?$t:$f;};
echo <<<TRUEFALSE
    The best color ever is {$or(rand(0,1),'green','black')}
TRUEFALSE;

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

2 голосов
/ 18 января 2013

Вот хороший пример использования предложения @CJDennis:

function double($i)
{ return $i*2; }

function triple($i)
{ return $i*3;}

$tab = 'double';
echo "{$tab(5)} is $tab 5<br>";

$tab = 'triple';
echo "{$tab(5)} is $tab 5<br>";

Например, хорошее использование синтаксиса HEREDOC - генерировать огромные формы с отношениями мастер-деталь в базе данных. Можно использовать функцию HEREDOC внутри элемента управления FOR, добавляя суффикс после каждого имени поля. Это типичная задача на стороне сервера.

2 голосов
/ 09 апреля 2011

Немного поздно, но все же. Это возможно в heredoc!

Загляните в руководство по php, раздел "Сложный (фигурный) синтаксис"

1 голос
/ 17 сентября 2016
<div><?=<<<heredoc
Use heredoc and functions in ONE statement.
Show lower case ABC="
heredoc
. strtolower('ABC') . <<<heredoc
".  And that is it!
heredoc
?></div>
1 голос
/ 10 мая 2010

Ребята должны заметить, что он также работает со строками в двойных кавычках.

http://www.php.net/manual/en/language.types.string.php

Интересный совет в любом случае.

0 голосов
/ 03 сентября 2016
<?php
echo <<<ETO
<h1>Hellow ETO</h1>
ETO;

ты должен попробовать это. после завершения ВТО; команду, которую вы должны дать ввести.

...