Вот несколько альтернатив другим ответам, которые, по-видимому, сосредоточены главным образом на трюке «{$}». Хотя на их скорости нет гарантий; это весь чистый синтаксический сахар. Для этих примеров мы предположим, что набор констант ниже был определен.
define( 'BREAD', 'bread' ); define( 'EGGS', 'eggs' ); define( 'MILK', 'milk' );
Использование extract () Это хорошо, потому что результат идентичен переменным. Сначала вы создаете функцию многократного использования:
function constants(){ return array_change_key_case( get_defined_constants( true )[ 'user' ] ); }
Затем вызывайте ее из любой области:
extract( constants() );
$s = "I need to buy $bread, $eggs, and $milk from the store.";
Здесь она уменьшает константы, которые будут проще на ваших пальцах, но вы можете удалите array_change_key_case (), чтобы сохранить их как есть. Если у вас уже есть конфликтующие локальные имена переменных, константы не будут их переопределять.
Использование замены строки. Это похоже на sprintf (), но использует единственный токен замены и принимает неограниченное количество аргументов. Я уверен, что есть лучшие способы сделать это, но простите мою неуклюжесть и попытайтесь сосредоточиться на идее этого.
Как и раньше, вы создаете функцию многократного использования:
function fill(){
$arr = func_get_args(); $s = $arr[ 0 ]; array_shift( $arr );
while( strpos( $s, '/' ) !== false ){
$s = implode( current( $arr ), explode( '/', $s, 2 ) ); next( $arr );
} return $s;
}
Затем вызовите его из любой области:
$s = fill( 'I need to buy /, /, and / from the store.', BREAD, EGGS, MILK );
Вы можете использовать любой заменяющий токен, например,% или #. Я использовал косую черту, потому что ее немного легче набрать.