【问题标题】:Initialize static members in PHP在 PHP 中初始化静态成员
【发布时间】:2010-05-29 06:39:37
【问题描述】:
class Person {
  public static function ShowQualification() {
  }
}

class School {
  public static $Headmaster = new Person(); // NetBeans complains about this line
}

为什么这不可能?

我希望能够像这样使用它

School::Headmaster::ShowQualification();

..没有实例化任何类。我该怎么做?

更新:好的,我明白了为什么部分。有人可以解释 HOW 部分吗?谢谢:)

【问题讨论】:

  • 静态属性也称为类属性,与对象属性相反。为什么您希望所有所学校只有一个校长?
  • 请不要从语义上看。我无法发布我的专有代码。我只是想了一些愚蠢的例子。不妨将它们命名为 abc 和 xyz :D

标签: php static-members


【解决方案1】:

来自the docs

"像任何其他 PHP 静态变量一样, 静态属性只能是 使用文字初始化或 持续的;表达式不是 允许。”

new Person() 不是文字或常量,所以这不起作用。

您可以使用解决方法:

class School {
  public static $Headmaster;
}

School::$Headmaster = new Person();

【讨论】:

  • 您的答案被引用,我理解“为什么”部分。但是如何我应该修改我的代码以便我可以使用所描述的类?
  • +1 谢谢 :).. 只是出于好奇,人们如何忍受这个? PHP 是一种广泛用于 Web 开发的语言,我很惊讶我们必须这样做......
  • @Senthil:因为这不是世界末日,而且是很少的努力?
【解决方案2】:

new Person() 是一个操作,而不是一个值。

像任何其他 PHP 静态变量一样, 静态属性只能是 使用文字初始化或 持续的;不允许表达。 所以虽然你可以初始化一个静态 属性为整数或数组(对于 实例),你可能不会初始化它 到另一个变量,到一个函数 返回值,或返回到一个对象。

http://php.net/static

您可以将 School 类初始化为一个对象:

class School {
  public static $Headmaster; // NetBeans complains about this line
  public function __construct() {
    $this->Headmaster = new Person();
  }
}

$school = new School();
$school->Headmaster->ShowQualification();

【讨论】:

  • 嗨,我不想实例化。我只想像 Class1::Member1::SubMember 一样使用它们。
  • 您不能将 $this 用于静态变量,实例化对象以访问静态变量也没有任何意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多