Допустим, у меня есть статическая переменная с именем $ _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;