2010-05-29 4 views
1
class Person { 
    public static function ShowQualification() { 
    } 
} 

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

Почему это невозможно?Инициализация статических элементов в PHP

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

School::Headmaster::ShowQualification(); 

..without инстанцировании любого класса. Как мне это сделать?

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

+0

Статические свойства также называются свойствами класса в противоположном свойства объекта. Почему вы хотите иметь только * одного директора * для всех * школ? – Gumbo

+0

Не смотрите на семантически. Я не могу опубликовать свой собственный код. Я просто придумал какой-то глупый пример. Могли бы также назвать их abc и xyz: D – Senthil

ответ

3

От the docs,

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

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

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

class School { 
    public static $Headmaster; 
} 

School::$Headmaster = new Person(); 
+0

Ваш ответ цитируется, я понимаю часть «почему». Но * как * я должен изменить свой код, чтобы я мог использовать классы, как описано? – Senthil

+0

+1 Спасибо :) .. Просто из любопытства, как люди живут с этим? PHP является широко используемым языком для веб-разработки, я удивлен, что нам нужно это делать так ... – Senthil

+0

@ Senthil: Потому что это не конец света, и это очень мало усилий? –

-2

new Person() является операцией, а не значение.

Как и любой другой статической переменной PHP, статические свойства могут быть инициализируется только с помощью буквального или константу; выражения не допускаются. Итак, если вы можете инициализировать свойство static целому числу или массиву (для экземпляра ), вы не можете инициализировать его другой переменной, к функции возвращаемому значению или объекту.

http://php.net/static

Вы можете инициализировать класс школы к объекту:

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

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

Привет, я не хочу создавать экземпляр. Я просто хочу использовать их как Class1 :: Member1 :: SubMember. – Senthil

+2

-1. Вы не можете использовать $ this для статической переменной. –

+0

Вы не можете использовать $ this для статической переменной, и не имеет никакого смысла создавать экземпляр объекта для доступа к статической переменной. –

Смежные вопросы