Вот некоторые альтернативы другим ответам, которые, кажется, сосредоточены главным образом на уловке "{$}". Хотя нет никаких гарантий на их скорость; это все чистый синтаксический сахар. Для этих примеров мы будем предполагать, что набор констант ниже был определен.
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 );
Вы можете использовать любой заменяющий токен, например,% или #. Здесь я использовал косую черту, так как ее немного легче набрать.