Есть ли в PHP способ включить константу в строку без объединения?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
php
string
constants
concatenation
Брайан
источник
источник
Ответы:
Нет.
В случае Strings PHP не может отличить строковые данные от константных идентификаторов. Это относится к любому из строковых форматов в PHP, включая heredoc.
constant()
это альтернативный способ получить константу, но вызов функции не может быть помещен в строку без конкатенации.Руководство по константам в PHP
источник
define('ANIMAL','turtles'); $constant='constant'; echo "I like {$constant('ANIMAL')}";
Да, это так (в некотором роде;))
Вероятно, это не то, к чему вы стремились, но я думаю, что технически это не конкатенация, а подстановка, и из этого предположения она включает константу в строку без конкатенации .
источник
Чтобы использовать константы внутри строк, вы можете использовать следующий метод:
Как это работает?
Вы можете использовать любое имя строковой функции и произвольные параметры
Можно поместить любое имя функции в переменную и вызвать его с параметрами внутри строки в двойных кавычках. Работает с несколькими параметрами тоже.
Производит
Анонимные функции тоже
Вы также можете использовать анонимные функции, если вы используете PHP 5.3+.
Создает правильно экранированный HTML, как и ожидалось.
Массивы обратного вызова не допускаются!
Если к настоящему моменту у вас сложилось впечатление, что имя функции может быть любым вызываемым, это не так, поскольку массив, возвращающий значение true при передаче
is_callable
, вызовет фатальную ошибку при использовании внутри строки:Иметь ввиду
Эта практика опрометчива, но иногда приводит к гораздо более читабельному коду, так что решать вам - возможность есть.
источник
$_ = create_function('$a','return $a;'); $s = "I like {$_(ANIMAL)}"
. Версия Thetaiko устраняет необходимость в кавычках, а подчеркивание симпатично.источник
источник
Если вы действительно хотите отображать константу без конкатенации, вот решение:
примечание : в этом примере echo принимает несколько параметров ( посмотрите на запятые ), поэтому это не настоящая конкатенация
Echo ведет себя как функция, он принимает больше параметров, он более эффективен, чем конкатенация, потому что ему не нужно конкатенировать и затем эхо, он просто повторяет все без необходимости создания нового объекта String сцепленного :))
РЕДАКТИРОВАТЬ
Кроме того, если вы считаете , конкатенация струнными, обгоны строки в качестве параметров или писать целые строки с «The , (запятая версия) всегда быстро, рядом идет . (Конкатенация с ' одинарных кавычками) и медленный строка метода построения использует двойные кавычки » , потому что выражения, написанные таким образом, должны сравниваться с объявленными переменными и функциями ..
источник
Вы могли бы сделать:
источник
Самый простой способ
Еще один способ использования
(s)printf
источник
Как уже отмечали другие, вы не можете этого сделать. В PHP есть функция,
constant()
которую нельзя вызывать непосредственно в строке, но мы можем легко обойти это.и базовый пример его использования:
источник
$constant = 'constant';
вместо определения другой функции, и она будет работать идентично, поскольку эта функция уже существует.Вот некоторые альтернативы другим ответам, которые, кажется, сосредоточены главным образом на уловке "{$}". Хотя нет никаких гарантий на их скорость; это все чистый синтаксический сахар. Для этих примеров мы будем предполагать, что набор констант ниже был определен.
Использование extract ()
Это хорошо, потому что результат идентичен переменным. Сначала вы создаете функцию многократного использования:
Тогда назовите это из любой области:
Здесь это упрощает константы для ваших пальцев, но вы можете удалить array_change_key_case (), чтобы оставить их как есть. Если у вас уже есть конфликтующие имена локальных переменных, константы не будут переопределять их.
Использование замены строки
Этот метод аналогичен sprintf (), но использует один маркер замены и принимает неограниченное количество аргументов. Я уверен, что есть лучшие способы сделать это, но простите мое грубость и постарайтесь сосредоточиться на идее, стоящей за этим.
Как и раньше, вы создаете функцию многократного использования:
Тогда назовите это из любой области:
Вы можете использовать любой заменяющий токен, например,% или #. Я использовал косую черту здесь, потому что это немного легче набирать.
источник
Интересно, что вы можете использовать ключевое слово «const» в качестве имени для своей функции, чтобы предотвратить засорение пространства имен:
Вы также можете использовать $ GLOBALS для распространения функции const по всему коду:
Не уверен, что это безопасно для будущего использования. И что еще хуже - все равно выглядит некрасиво.
источник
Я считаю, что это отвечает на оригинальный вопрос ОП. Единственное, что глобальный индексный ключ, похоже, работает только в нижнем регистре.
Вывод:
источник
an associative array containing references to all variables
.$db_user = 'root';