Статические переменные PHP в двойных кавычках
Как я могу получить PHP для оценки статической переменной в двойных кавычках?
Я хочу сделать что-то вроде этого:
log("self::$CLASS $METHOD entering");
Я пробовал все виды {} комбо, чтобы получить переменное значение self::$CLASS, но ничего не сработало. В настоящее время я решил конкатенацию строк, но это боль для ввода:
log(self::$CLASS . " $METHOD entering");
7 ответов
Извините, вы не можете этого сделать. Он работает только для простых выражений. См.здесь.
к сожалению, пока нет способа сделать это. Пример в одном из ответов здесь работать не будет, потому что {${self::$CLASS}}
не возвращает контент self::$CLASS
, но будет возвращать содержимое переменной с именем в self::$CLASS
.
вот пример, который не возвращает myvar
, а aaa
:
$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";
Я не знаю ответ на ваш вопрос, но вы можете показать имя класса и метода, с помощью __METHOD__
магической константы.
просто живите с конкатенацией. вы будете удивлены, насколько неэффективной может быть интерполяция переменных в строках.
и хотя это может попасть под зонтик предварительной оптимизации или микро-оптимизации, я просто не думаю, что вы на самом деле получите какую-либо элегантность в этом примере.
лично, если я собираюсь сделать небольшую оптимизацию одного или другого, и мой выбор "быстрее" и "проще" - я выберу "быстрее". Потому что вы только печатаете это несколько раз, но это, вероятно, будет выполняться тысячи раз.
используйте анонимную функцию идентификации, хранящуюся в переменной. Таким образом, у вас будет $
сразу после {
:
$I = function($v) { return $v; };
$interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";
(Я использую константы класса в этом примере, но это будет работать и со статическими переменными).
Я знаю, это старый вопрос, но мне кажется странным, что никто не предложил [sprintf][1]
функция еще.
говорят:
<?php
class Foo {
public static $a = 'apple';
}
вы бы использовали его с:
echo sprintf( '$a value is %s', Foo::$a );
так что на вашем примере:
log(
sprintf ( ' %s $METHOD entering', self::$CLASS )
);