PHP:引用静态变量中的另一个静态变量

时间:2016-09-29 12:42:02

标签: php reference static

要么我太愚蠢,要么在中这是不可能的(这实际上是任何编程语言中的基本功能......): 所以这是我的问题的例子:

class Test {
 private static $A = "test";
 private static $B = "This is a " . Test::$A . " to see if it works";
}

我的预期结果是变量$B,其值为This is a test to see if it works

但不知怎的,我收到了这个错误:

  

解析错误:语法错误,意外' $ A' (T_VARIABLE),期望第4行的/.../class.Test.php中的标识符(T_STRING)或类(T_CLASS)

这是无法做到的事情还是只是一些愚蠢的错字?我很快就找不到错误...

提前致谢

2 个答案:

答案 0 :(得分:0)

  1. 您无法为类属性分配动态值。请参阅manual

  2. 您可以尝试定义魔术吸气剂,但吸气剂不能使用静态属性。请参阅manual

  3.   

    属性重载仅适用于对象上下文。这些神奇的方法   不会在静态上下文中触发。因此这些方法   不应该声明为静态。从PHP 5.3.0开始,如果发出警告   其中一个神奇的重载方法被声明为static。

         

    在PHP 5.3中,添加了__callStatic;但是没有__getStatic   也不是__setStatic

    1. 因此,我看到的唯一选项是使用__callStatic并通过静态魔术方法访问您的属性。请参阅下面的示例。

      class A {
      
         public static $A = 'A';
      
         public static function __callStatic($name, $arguments)
         {
            if ($name== 'B') {
               return B::$B;
            }
         }
      
      }
      
      class B {
          public static $B = 'B';
      }
      
      echo A::B(); // return 'B'
      

答案 1 :(得分:0)

另一种解决方案,如果你不想要另一个clas

EXEC(@code)

}

class TestStatic
{
    private static $A = 'test';
    private static $B;

    //if you want to instantiate the object
    public function __construct() {
        self::setB();
    }

    //if you don't want to instantiate the class 
    public static function getB() {
        self::setB();
       return self::$B;
    }

    private static function setB() {
       if (!isset(self::$B)) {
        self::$B = 'This is a '.self::$A.' to see if it works';
    }
}