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

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

Pourquoi cela n'est-il pas possible?Initialiser les membres statiques dans PHP

Je veux être en mesure d'utiliser cela comme

School::Headmaster::ShowQualification(); 

..without instancier une classe. Comment puis-je le faire?

Mise à jour: D'accord, j'ai compris la partie POURQUOI. Quelqu'un peut-il expliquer la partie COMMENT? Merci :)

+0

propriétés statiques sont également appelées propriétés de classe en face de propriétés de l'objet. Pourquoi voudriez-vous avoir seulement * un * directeur * pour * toutes * les écoles? – Gumbo

+0

S'il vous plaît ne le regardez pas sémantiquement. Je ne peux pas poster mon code propriétaire. Je viens d'imaginer un exemple stupide. Je pourrais aussi les avoir nommés abc et xyz: D – Senthil

Répondre

3

De the docs,

"Comme toute autre variable statique PHP, propriétés statiques ne peuvent être initialisées en utilisant un littéral ou constante, les expressions ne sont pas autorisés ."

new Person() n'est pas un littéral ou une constante, donc cela ne fonctionnera pas.

Vous pouvez utiliser un travail autour:

class School { 
    public static $Headmaster; 
} 

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

Votre réponse étant citée, je comprends la partie "pourquoi". Mais * comment * dois-je modifier mon code pour pouvoir utiliser les classes comme décrit? – Senthil

+0

+1 Merci :) .. Juste par curiosité, comment les gens vivent avec cela? PHP étant un langage largement utilisé pour le développement web, je suis surpris que nous devons le faire de cette façon ... – Senthil

+0

@Senthil: Parce que ce n'est pas la fin du monde et c'est très peu d'effort? –

-2

new Person() est une opération, pas une valeur.

Comme toute autre variable statique PHP, propriétés statiques ne peuvent être initialisées en utilisant une constante littérale ou ; les expressions ne sont pas autorisées. Ainsi, alors que vous pouvez initialiser une propriété statique à un entier ou à un tableau (pour l'instance ), vous ne pouvez pas l'initialiser à une autre variable, à une fonction ou à un objet.

http://php.net/static

Vous pouvez initialiser la classe de l'école à un objet:

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

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

Salut, je ne veux pas instancier. Je veux juste les utiliser comme Class1 :: Member1 :: SubMember. – Senthil

+2

-1. Vous ne pouvez pas utiliser $ this pour une variable statique. –

+0

Vous ne pouvez pas utiliser $ this pour une variable statique et cela n'a aucun sens d'instancier un objet pour accéder à une variable statique. –