Intereting Posts

Как вручную интерполировать строку?

Единственный способ, которым я нашел интерполяцию строки (IE развернуть переменные внутри нее), следующий:

$str = 'This is a $a'; $a = 'test'; echo eval('return "' . $str . '";'); 

Имейте в виду, что в реальном сценарии строки создаются в разных местах, поэтому я не могу просто заменить ' s " s.

Есть ли лучший способ для расширения строки с одним кавычком без использования eval ()? Я ищу то, что сам PHP предоставляет.

Обратите внимание : использование strtr () аналогично использованию чего-то вроде sprintf (). Мой вопрос отличается от вопроса, связанного с возможным дублирующимся разделом этого вопроса, так как я позволяю строкам контролировать, как (IE через какие вызовы функций или аксессуры свойств) он хочет получить контент.

Solutions Collecting From Web of "Как вручную интерполировать строку?"

Вот возможное решение, не уверенное в вашем конкретном сценарии, если бы это сработало для вас, но это, безусловно, вырезало бы потребность в стольких одиночных и двойных кавычках.

 <?php class a { function b() { return "World"; } } $c = new a; echo eval('Hello {$c->b()}.'); ?> 

Существует больше механизмов, чем синтаксис строкового литерала PHP для замены заполнителей в строках! Довольно распространенным является sprintf :

 $str = 'This is a %s'; $a = 'test'; echo sprintf($str, $a); 

http://php.net/sprintf

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

Вы слышали о strtr() ? http://php.net/manual/en/function.strtr.php

он служит этой самой цели и очень полезен для создания динамической html-информации, содержащей информацию из базы данных, например

учитывая следующую строку:

 $str = 'here is some text to greet user {zUserName}'; 

то вы можете проанализировать его с помощью strtr() :

 $userName = 'Mike'; $parsed = strtr($str,array('{zUserName}'=>$userName)); echo $parsed; // outputs: 'here is some text to greet user Mike' 

В то время как sprintf работает быстрее, strtr позволяет вам контролировать, что происходит там, где более дружелюбно ( sprintf самом деле не справляется с очень длинными строками, содержащими сто замещающих замещающих)