1
class Person {
  public static function ShowQualification() {
  }
}

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

なぜこれが不可能なのですか?

こんな風に使えるようになりたい

School::Headmaster::ShowQualification();

..クラスをインスタンス化せずに。どうすればいいですか?

更新:わかりました。WHY の部分は理解しました。誰かがHOW部分を説明できますか? ありがとう :)

4

2 に答える 2

3

ドキュメントから、

「他の PHP 静的変数と同様に、静的プロパティはリテラルまたは定数を使用してのみ初期化できます。式は使用できません。」

new Person()はリテラルでも定数でもないため、これは機能しません。

次の回避策を使用できます。

class School {
  public static $Headmaster;
}

School::$Headmaster = new Person();
于 2010-05-29T06:43:47.610 に答える
-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();
于 2010-05-29T06:45:09.557 に答える