Инициализировать статические члены в PHP - PullRequest
1 голос
/ 29 мая 2010
class Person {
  public static function ShowQualification() {
  }
}

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

Почему это невозможно?

Я хочу иметь возможность использовать это как

School::Headmaster::ShowQualification();

.. без создания экземпляров какого-либо класса. Как я могу это сделать?

Обновление: Хорошо, я понял, почему. Может кто-нибудь объяснить, как часть? Спасибо:)

Ответы [ 2 ]

3 голосов
/ 29 мая 2010

Из документов ,

"Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения недопустимы."

new Person() не является литералом или константой, поэтому это не сработает.

Вы можете использовать обходной путь:

class School {
  public static $Headmaster;
}

School::$Headmaster = new Person();
0 голосов
/ 29 мая 2010

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();
...