Правильный способ доступа к статической переменной внутри строки с синтаксисом heredoc? - PullRequest
2 голосов
/ 08 января 2012

Допустим, в моем классе есть статическая переменная с именем $ _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Это содержимое моей статической переменной,self :: -> моя статическая переменная,который не получает доступ должным образом в синтаксисе heredoc.

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Это содержимое моей статической переменной,который не получает доступ должным образом в синтаксисе heredoc.


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

display_startup_errors = ondisplay_errors = Onerror_reporting = E_ALL |E_STRICT

Ответы [ 2 ]

3 голосов
/ 08 января 2012

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

    $_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;

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

2 голосов
/ 29 сентября 2016

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

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

<?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;
...