我试图在静态类变量的定义中访问静态类方法。我尝试了几次尝试,但无法获取编译代码。
<?php
class TestClass {
private static $VAR = doSomething(array());
private static function doSomething($input) {
return null;
}
}
?>
错误:
dev@box:~/php$ php -l TestClass.php
PHP Parse error: syntax error, unexpected '(', expecting ',' or ';' in TestClass.php on line 3
Errors parsing TestClass.php
<?php
class TestClass {
private static $VAR = self::doSomething(array());
private static function doSomething($input) {
return null;
}
}
?>
错误:
dev@box:~/php$ php -l TestClass.php
PHP Parse error: syntax error, unexpected '(', expecting ',' or ';' in TestClass.php on line 3
Errors parsing TestClass.php
<?php
class TestClass {
private static $VAR = static::doSomething(array());
private static function doSomething($input) {
return null;
}
}
?>
错误:
dev@box:~/php$ php -l TestClass.php
PHP Fatal error: "static::" is not allowed in compile-time constants in TestClass.php on line 3
Errors parsing TestClass.php
<?php
class TestClass {
private static $VAR = $this->doSomething(array());
private static function doSomething($input) {
return null;
}
}
?>
错误:
dev@Dev08:~/php$ php -l TestClass.php
PHP Parse error: syntax error, unexpected '$this' (T_VARIABLE) in TestClass.php on line 3
Errors parsing TestClass.php
任务看起来很简单,使用静态方法来定义静态变量,但我无法弄清楚如何在静态变量声明的上下文中正确访问静态方法。
如何在PHP v5.5.3
中的静态变量定义中调用静态方法?
答案 0 :(得分:2)
<?php
class TestClass {
private static $VAR = null;
private static function doSomething($input) {
return null;
}
public static function Construct(){
self::$VAR = self::doSomething(array());
}
}
TestClass::Construct();
?>
您可以将静态初始化为标量和数组。您无法通过函数调用初始化它。所以你需要一个公共方法,如果你需要私有的话,可以调用它来初始化静态。
如果他们是公开的,你可以做到:
TestClass::$VAR = TestClass::doSomething(array());
在类声明之后或当你想要实例化它时。
<强> PROOF 强>
与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化;不允许使用表达式。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您可能不会将其初始化为另一个变量,函数返回值或对象。的 from PHP.net/Static 强>