要么我太愚蠢,要么在php中这是不可能的(这实际上是任何编程语言中的基本功能......): 所以这是我的问题的例子:
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)
这是php无法做到的事情还是只是一些愚蠢的错字?我很快就找不到错误...
提前致谢
答案 0 :(得分:0)
您无法为类属性分配动态值。请参阅manual
您可以尝试定义魔术吸气剂,但吸气剂不能使用静态属性。请参阅manual
属性重载仅适用于对象上下文。这些神奇的方法 不会在静态上下文中触发。因此这些方法 不应该声明为静态。从PHP 5.3.0开始,如果发出警告 其中一个神奇的重载方法被声明为static。
在PHP 5.3中,添加了__callStatic;但是没有__getStatic 也不是__setStatic
因此,我看到的唯一选项是使用__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';
}
}