访问静态变量定义中的静态方法

时间:2014-02-28 18:29:32

标签: php class static-methods static-variables

我试图在静态类变量的定义中访问静态类方法。我尝试了几次尝试,但无法获取编译代码。

天真的尝试:

<?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中的静态变量定义中调用静态方法?

1 个答案:

答案 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