Proper way to access a static variable inside a string with a heredoc syntax?

主宰稳场 提交于 2019-12-01 00:59:47

I'm fairly certain you must use a local or imported variable for string interpolation. The easiest solution? Why, make it local of course:

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

As for the reasons your examples didn't work:

    echo <<<eos

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

eos;

Interpolates undefined variables $something and $_staticVar, which results in an empty string and a notice.

    echo <<<eos

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

eos;

Interpolates the value of something that definitely doesn't exist and never will and it's all really confusing but you know it doesn't work.

You can do show at this sample class to show how to access/call a static method or attribute from inside a string.

You must store the classname inside a variable, so you can access classelements over this variable and yes you can access static variables and static methods.

<?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;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!