2009-10-16 9 views
0

pourquoi je ne peux pas faire comme ça?php5 étendre la classe principale et utiliser la statique

<?php 
class core { 
    public static $db; 


    function __construct() { 
     $this->db = new mysql('host', 'user', 'pw', 'db'); 
    } 
} 

class stat extends core { 
    public static function log() { 
     core::$db->query("insert into mytable values(now())"); 
    } 
} 

// do something 
stat::log(); 
?> 

Répondre

0

Par le regard de votre code, parce que vous n'attribuez pas quoi que ce soit dans $ db. Le constructeur est seulement appelé quand vous créez une instance de la classe, pas avec la statique.

En outre, pourquoi votre code étend-il même le noyau? Vous n'avez pas besoin de l'étendre pour utiliser des méthodes/variables statiques. Peut-être cela aurait-il plus de sens d'en faire une propriété d'instance, et d'utiliser une nouvelle instance au lieu de statique?

0

La méthode core :: __ construct() est appelée uniquement lorsque vous appelez new core ou new stat, invoquant la création d'un objet. Vous allez directement à stat::log(), donc core :: $ db n'a jamais été initialisé.

Questions connexes