Существует ли путь в PHP для включения константы в строку без конкатенации?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
Нет.
Используя строки, PHP не может отличать строковые данные от константных идентификаторов. Это касается любого строкового формата в PHP, включая heredoc.
constant ()
- альтернативный способ получить константу, но вызов функции также не может быть помещен в строку без конкатенации.
Да, это так (в некотором роде;)) :
define('FOO', 'bar');
$test_string = sprintf('This is a %s test string', FOO);
Вероятно, это не то, к чему вы стремились, но я думаю, что технически это не конкатенация, а подстановка, и, исходя из этого предположения, он включает константу в строку без конкатенации .
Вы могли бы сделать:
define( 'FOO', 'bar' );
$constants = get_defined_constants(true); // the true argument categorizes the constants
$constants = $constants[ 'user' ]; // this gets only user-defined constants
echo "Hello, my name is {$constants['FOO']}";
Если вы действительно хотите отображать константу без конкатенации , вот решение:
define('MY_CONST', 300);
echo 'here: ', MY_CONST, ' is a number';
примечание : в этом примере эхо принимает ряд параметров ( посмотрите на запятые ), поэтому это не настоящая конкатенация
Echo ведет себя как функция, она принимает больше параметров, она более эффективна, чем конкатенация, потому что ей не нужно конкатенацию, а затем эхо, она просто отображает все без необходимости создание нового объединенного объекта String :))
EDIT
Также, если вы рассматриваете объединение строк, передачу строк как параметров или запись целых строк с помощью " , , (версия с запятыми) всегда самый быстрый, затем идет . (конкатенация с одинарными кавычками '), а самый медленный метод построения строк - использование двойных кавычек ", поскольку выражения, написанные таким образом, должны оцениваться по объявленным переменным и функциям ..
define('FOO', 'bar');
$constants = create_function('$a', 'return $a;');
echo "Hello, my name is {$constants(FOO)}";