php5扩展主类并使用静态

时间:2009-10-16 21:20:00

标签: php class static

为什么我不能这样做?

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

2 个答案:

答案 0 :(得分:0)

通过代码的外观,因为您没有为$ db分配任何内容。只有在创建类的实例时才会调用构造函数,而不是使用静态。

另外,为什么你的代码甚至扩展了核心?您不需要将其扩展为使用静态方法/变量。也许将它真正变成实例属性更有意义,并使用新实例而不是静态?

答案 1 :(得分:0)

只有在调用new corenew stat时调用core :: __ construct()方法,才能调用对象的创建。你直接进入stat::log(),所以core :: $ db从未被初始化。