为什么从兄弟类调用静态方法不能在没有实例化的情况下工作


Why calling static methods from sibling classes does not work without instantiation?

我有一个通用父类数据库元素,如

class item {
    function set($i = '') {
        //set element in database
    }
    function get($id = '') {
        //get element in database
        return $item;
    }
}

我有不同的类来实现项目的父类,比如usersevents——当我为类事件调用users内部的set方法时,比如

class users extends item {
    function dothis() {
        events::set(array('start' => 'today', 'end' => 'tomorrow'));
    }
}

就好像我写了

class users extends item {
    function dothis() {
        self::set(array('start' => 'today', 'end' => 'tomorrow'));
    }
}

试图将事件插入用户表,所以我必须这样实例化类

class users extends item {
    function dothis() {
        $e = new events();
        $e->set(array('start' => 'today', 'end' => 'tomorrow'));
    }
}

我做错了什么吗?是否有避免实例化的方法?

EDIT -我的框架中的所有类都以静态方式调用,不需要new$this,它工作得很好。

如果你想使用静态方法,你还应该像这样声明你的方法:

protected static function set($i = '') {
protected static function get($id = '') {

可以调用self::set(...)self::get(...)

如果你想使用非静态方法,你只需要修改

self::set(...)

$this->set(...)