Static Function Variables and Concatenation in PHP

前端 未结 3 1352
无人及你
无人及你 2020-12-20 11:32

Consider the following:

$var = \'foo\' . \'bar\'; # Not a member of a class, free-standing or in a function.

As soon as I mark $var

相关标签:
3条回答
  • 2020-12-20 11:57

    I do this:

    class MyClass {
    
      static $var1;
      static $var2;
      public static function _init() {
          self::$var1 = 'slkslk' . 'sksks' . 'arbitrary' ; 
          self::var2 = <<<EOT
              <root>
                <elem1>skjsksj</elem1>
              </root>
    EOT;
      }
    }
    MyClass::_init();
    
    0 讨论(0)
  • 2020-12-20 12:02

    The manual states, in Variables scope:

    Trying to assign values to these [static] variables which are the result of expressions will cause a parse error.

    There is also mention of it in Static keyword:

    Like any other PHP static variable, static properties may only be initialized using a literal or constant; expressions are not allowed.

    Although it should be noted that a property, static or not, cannot be initialized using an expression neither.

    0 讨论(0)
  • 2020-12-20 12:21

    You can not do expressions in initializers. You can, however, do this:

    define('FOOBAR', 'foo'.'bar');
    static $var = FOOBAR;
    echo $var;
    

    Little known fact is that even though initializers can not contain runtime expressions, it can contain constants which can be defined and resolved at runtime. The constant has to be defined by the time $var is first used though, otherwise you'll get string identical to the constant (e.g. "FOOBAR").

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