Каков наилучший способ объединения статической переменной класса пространства имен? - PullRequest
0 голосов
/ 31 января 2019

В PHP мы можем делать такие вещи:

$who = 'world';
$a = 'hello ' . $who;

или

$a = "hello $who";

или

$a = "hello {$who}"

Цитирование Стивен Клей из php.net в раздел операторов String последний способ является наилучшим, потому что когда мы используем точки, PHP вынужден повторно объединять все строки.Также, если нам нужно объединить больше переменных, последний способ лучше, чем второй. Но , Каков наилучший способ, если мне нужно объединить значение из статической переменной класса?PHP выдает ошибку, если вы пытаетесь объединить переменную непосредственно в класс пространства имен, без использования точек.Только первый путь, показанный ранее, разрешен.Я хочу знать, есть ли какой-то другой способ сделать это

ОШИБКА:

$a = "hello \namespace\classname::$who"; //NOTICE: undefined variable who
$b = "hello ${\namespace\classname::$who}"; //NOTICE: undefind variable classname
$c = "hello \namespace\classname::${who}"; //NOTICE: undefine variable who.
$d = "hello {\namespace\classname::$who}"; //NOTICE: undefine variable who

Я пытался объяснить с помощью простого кода, на самом деле мне нужно объединить статическую переменную изкласс, который я не могу получить экземпляр.Если вы добавили некоторый класс в переменную, а затем попытались объединить статическое свойство, то это также будет выполнено правильно

$who = new \namespace\classname();
$a = "{$who::$who} $a"; // this run ok.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Что является наилучшим способом, если мне нужно объединить значение из статической переменной класса

Тот, который работает.Это микрооптимизации, которые обычно не оказывают какого-либо ощутимого влияния на производительность.Выберите версию, которая более удобна для чтения, и используйте ее:

$who = \namespace\classname::$who;
$a = "hello {$who}";

или

$a = 'hello ' . \namespace\classname::$who;

, а затем сосредоточьтесь на более важных вещах.Я уверен, что в вашем приложении есть много мест, которые можно оптимизировать и обеспечить измеримые улучшения производительности, не тратьте время на такие низкоуровневые вещи (если только ваше приложение не объединяет только строки: P).

0 голосов
/ 31 января 2019

Проблема с чем-то вроде ...

$d = "hello {\namespace\classname::$who}"

заключается в том, что {} обычно ожидает, что только переменная выполнит замену, но, как он видит, \namespace\classname не будет знать, еслиэто был литеральный фрагмент текста или нет, поэтому по умолчанию он является литералом, а затем получает значение $who и ищет переменную в текущем пространстве имен.

Если вы не можете получить экземпляркласс, вы все еще можете установить переменную с именем класса ...

$class = namespace\classname::class;
echo "Hello {$class::$who}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...