将类引用为className :: methodName()

时间:2011-02-17 19:30:55

标签: php oop

据我所知,你可以实例化这个类:

$class = new className();

然后在其中使用方法:

$class->myMethod();

或者如果你想在类中使用某些内容而不实例化它,你可以这样做:

className::myMethod();

我确定我以前使用过后者而没有任何问题,但是为什么我会收到错误消息:

Fatal error: Using $this when not in object context

我用来调用它的代码是:

// Display lists with error message
manageLists::displayLists($e->getMessage());

课程如下..

class manageLists {

    /* Constructor */

    function __construct() {
        $this->db_connection = connect_to_db('main');
    }

    function displayLists($etext = false, $success = false) {

        // Get list data from database
        $lists = $this->getLists();

        ......

    }

    function getLists() {

        .........

    }

}

我从这一行得到了这个错误..

$lists = $this->getLists();

3 个答案:

答案 0 :(得分:2)

// Display lists with error message
manageLists::displayLists($e->getMessage());

如果从类的另一个实例方法中调用,这只是调用实例方法的有效方法。否则,对displayLists的调用将是静态的,并且不会有$this引用。如果您有足够高的错误报告,您应该会看到一条警告,告诉您正在静态调用实例方法。

答案 1 :(得分:2)

当您使用格式ClassName::methodName()时,您正在调用方法'静态',这意味着您直接在类定义上调用方法,而不是在类的实例上调用。由于您无法从实例调用静态方法,并且$this表示类的实例,因此会出现致命错误。

答案 2 :(得分:0)

如果您静态调用方法,则$this不存在。而不是:

$lists = $this->getLists();

你可以这样做:

$lists = self::getLists();

self的更多信息可在此处找到:When to use self over $this?