Правильный способ доступа к статической переменной внутри строки с синтаксисом heredoc?

Допустим, у меня есть статическая переменная с именем $ _staticVar в моем классе, к которой я пытаюсь получить доступ. Переменная имеет член aString который имеет строковое значение "my static variable"

  echo <<<eos <br/>This is the content of my static variable, self::$_staticVar->$aString which is not getting accessed properly in heredoc syntax. <br/> eos; 

Вывод:

Примечание. Неопределенная переменная: _staticVar в /path/to/file.php в строке some_line_number

<br/> Это содержимое моей статической переменной,
self :: -> моя статическая переменная,
который не получает доступ должным образом в синтаксисе heredoc. <br/>

В документах PHP для heredoc ничего не говорится об этом.


Я пробовал это:

  echo <<<eos <br/>This is the content of my static variable,<br/> {${self::$_staticVar->$aString}}<br/> which is not getting accessed properly in heredoc syntax. <br/> eos; 

и это не сработает.
Вывод:

Примечание. Неопределенная переменная: _staticVar в /path/to/file.php в строке some_line_number

<br/> Это содержимое моей статической переменной,

который не получает доступ должным образом в синтаксисе heredoc. <br/>


Это моя настройка PHP:

display_startup_errors = on
display_errors = On
error_reporting = E_ALL | E_STRICT

Я вполне уверен, что вы должны использовать локальную или импортированную переменную для интерполяции строк. Самое простое решение? Конечно, сделайте это локально, конечно:

  $_staticVar = self::$_staticVar; // or did you mean self::_staticVar? Not too clear on that. echo <<<eos <br/>Something {$_staticVar->something} more of something <br/> eos; 

Что касается причин, по которым ваши примеры не сработали:

  echo <<<eos <br/>Something self::$_staticVar->{$something} more of something <br/> eos; 

Интерполирует неопределенные переменные $something и $_staticVar , что приводит к пустой строке и уведомлению.

  echo <<<eos <br/>Something {${self::$$_staticVar->{$something}}} more of something <br/> eos; 

Интерполирует ценность чего-то, что определенно не существует и никогда не будет, и все это запутывает, но вы знаете, что это не работает.

Вы можете показать в этом примере класс, чтобы показать, как получить доступ / вызвать статический метод или атрибут изнутри строки.

Вы должны сохранить имя класса внутри переменной, чтобы вы могли получить доступ к кластерам над этой переменной, и да, вы можете получить доступ к статическим переменным и статическим методам.

 <?php class test { private $static = 'test'; // static Method static function author() { return "Frank Glück"; } // static variable static $url = 'http://www.dozent.net'; public function dothis() { $self = __CLASS__; echo <<<TEST {${$this->self}}::author()}} // don't works {${!${''}=static::author()}} // works {$self::author()} // works TEST; } } $test = 'test'; // this is the trick, put the Classname into a variable echo "{$test::author()} {$$test::$url}"; echo <<<HTML <div>{$test::author()}</div> <div>{$$test::$url}</div> HTML; ы <?php class test { private $static = 'test'; // static Method static function author() { return "Frank Glück"; } // static variable static $url = 'http://www.dozent.net'; public function dothis() { $self = __CLASS__; echo <<<TEST {${$this->self}}::author()}} // don't works {${!${''}=static::author()}} // works {$self::author()} // works TEST; } } $test = 'test'; // this is the trick, put the Classname into a variable echo "{$test::author()} {$$test::$url}"; echo <<<HTML <div>{$test::author()}</div> <div>{$$test::$url}</div> HTML;