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

后端 未结 2 966
青春惊慌失措
青春惊慌失措 2021-01-06 13:02

Lets say I have a static variable called $_staticVar in my class which I am trying to access like this. The variable has a member aString which has the string v

相关标签:
2条回答
  • 2021-01-06 13:06

    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;
    
    0 讨论(0)
  • 2021-01-06 13:25

    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.

    0 讨论(0)
提交回复
热议问题