1

当我尝试执行以下操作时,我得到一个syntax error, unexpected T_VARIABLE. 我究竟做错了什么?

class myObj {
  public $birth_month;
  public $birthday = array('input_val' => $this->birth_month);
}

我也试过

class myObj {
  public $birth_month;
  public $birthday = array('input_val' => $birth_month);
}
4

2 回答 2

3

您不能使用表达式来初始化类属性。它必须是一个常量值,或者您必须在构造函数中对其进行初始化。那是您的语法错误的根源。

class myObj {
  public $birth_month;
  public $birthday;

  // Initialize it in the constructor
  public function __construct($birth_month) {
    $this->birth_month = $birth_month;
    $this->birthday = array('input_val' => $this->birth_month);
  }
}

从关于类属性的文档中:

它们是通过使用关键字 public、protected 或 private 之一定义的,后跟一个普通的变量声明。这个声明可能包括一个初始化,但这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

在您的第一次尝试中,$this即使不考虑属性初始化的编译时限制,也不支持在实例方法外部使用,因为$this只有在实例方法内部才有意义。

于 2012-10-09T01:35:28.530 回答
0

$this 在您的类的非静态方法之外不存在。此外,在初始化时,还没有 $this。在构造函数方法中初始化您的数组。

于 2012-10-09T01:35:23.657 回答