, если вы отправляете переменную из PHP, вы можете получить ее с этим перед отправкой:
$string=nl2br($string);
Нет.
С помощью строк, 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( '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 );
Вы можете использовать любой заменяющий токен, например,% или #. Я использовал косую черту, потому что ее немного легче набрать.
Я считаю, что это отвечает первоначальному вопросу OP.
define('DB_USER','root');
echo "DB_USER=$GLOBALS[db_user]";
Выход:
DB_USER=root
Выходной сигнал: DB_USER=root
an associative array containing references to all variables
.
– har-wradim
15 October 2013 в 11:10
$db_user = 'root';
– Jeff Puckett
24 July 2016 в 21:12
Самый простой способ -
define('MY_CONSTANT', 42);
$my_constant = MY_CONSTANT;
echo "This is my constant: $my_constant";
Другой способ использования (s)printf
define('MY_CONSTANT', 42);
// Note that %d is for numeric values. Use %s when constant is a string
printf('This is my constant: %d', MY_CONSTANT);
// Or if you want to use the string.
$my_string = sprintf('This is my constant: %d', MY_CONSTANT);
echo $my_string;
Если вы действительно хотите эхо-константу без конкатенации, вот решение:
define('MY_CONST', 300);
echo 'here: ', MY_CONST, ' is a number';
note: в этом примере echo принимает несколько параметров (смотрите на запятые), поэтому он не является реальным concatenation
Echo ведет себя как функция, он принимает больше параметров, он более эффективен, чем конкатенация, потому что он не должен конкатенироваться, а затем эхо, он просто отгоняет все, не требуя создания новой String, конкатенированной object:))
EDIT
Также, если вы считаете, что конкатенация строк, строки проходов в качестве параметров или запись целых строк с помощью «, (,), всегда самая быстрая, следующая. (конкатенация «одиночными кавычками»), а самый медленный метод построения строк - это использование двойных кавычек », потому что написанные таким образом выражения должны оцениваться по объявленным переменным и функциям.
define( 'FOO', 'bar');
$FOO = FOO;
$string = "I am too lazy to concatenate $FOO in my string";
Чтобы использовать константы внутри строк, вы можете использовать следующий метод:
define( 'ANIMAL', 'turtles' );
$constant = 'constant';
echo "I like {$constant('ANIMAL')}";
Можно помещать любое имя функции в переменную и вызывать ее с параметрами внутри строки с двумя кавычками.
$fn = 'substr';
echo "I like {$fn('turtles!', 0, -1)}";
Производит
Мне нравятся черепахи
blockquote>Также анонимные функции
Вы также можете использовать анонимные функции при запуске PHP 5.3 +.
$escape = function ( $string ) { return htmlspecialchars( (string) $string, ENT_QUOTES, 'utf-8' ); }; $userText = "<script>alert('xss')</script>"; echo( "You entered {$escape( $userText )}" );
Производит правильно экранированный html, как ожидалось.
Массивы обратного вызова не разрешены!
Если к настоящему времени у вас создается впечатление, что имя функции может быть любым вызываемым, это не так, поскольку массив, который возвращает true при передаче в
is_callable
, приведет к фатальной ошибке при использовании внутри строки:class Arr { public static function get( $array, $key, $default = null ) { return is_array( $array ) && array_key_exists( $key, $array ) ? $array[$key] : $default; } } $fn = array( 'Arr', 'get' ); var_dump( is_callable( $fn ) ); // outputs TRUE // following line throws Fatal error "Function name must be a string" echo( "asd {$fn( array( 1 ), 0 )}" );
Имейте в виду
Эта практика не рекомендуется, но иногда приводит к гораздо более читаемому коду, так что это зависит от вас - есть возможность.
$_ = create_function('$a','return $a;'); $s = "I like {$_(ANIMAL)}"
. Версия Thetaiko устраняет необходимость в котировках, а символ подчеркивания - симпатичный.
– Beejor
5 June 2015 в 01:12
define('FOO', 'bar');
$constants = create_function('$a', 'return $a;');
echo "Hello, my name is {$constants(FOO)}";
Приятно, что вы можете использовать ключевое слово «const» в качестве имени для своей функции, чтобы предотвратить засоривание пространства имен:
define("FOO","foo");
${'const'} = function($a){return $a;};
echo "{$const(FOO)}"; // Prints "foo"
echo const(FOO); // Parse error: syntax error, unexpected T_CONST
Вы также можете использовать $ GLOBALS для распространения функции «const» во всем код:
$GLOBALS['const'] = function($a){return $a;};
Не уверен, что это безопасно для будущего использования. И что еще хуже - это все еще выглядит уродливо.
Как указывали другие, вы не можете этого сделать. PHP имеет функцию constant()
, которая не может быть вызвана непосредственно в строке, но мы можем легко обойти это.
$constant = function($cons){
return constant($cons);
};
и базовый пример ее использования:
define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}";
define('ANIMAL','turtles'); $constant='constant'; echo "I like {$constant('ANIMAL')}";
– raveren 27 April 2012 в 15:49