致命错误:在不在对象上下文解释中时使用$ this?

时间:2014-05-03 00:32:36

标签: php sql

我收到了这个我以前从未得过的奇怪错误。

  

致命错误:不在对象上下文中时使用$ this

Chat.php(班级)

<?php
class Chat {
private $_data = array(),
        $_db;

public function __construct($row){
    $this->_db = DB::getInstance();
    $this->_data = $row;

}

public function send($fields = array()) {
    $this->_db->insert('messages', $fields); <------- ERROR
 }

当我像这样调用发送功能时:

Chat::send(array(
'message' => Input::get('message'),
'author' => $user->data()->username,
'ts' => date('Y-m-d H:i:s')
));

弹出错误。

2 个答案:

答案 0 :(得分:0)

您需要使用new创建一个对象,以便有一个$this对象:

$chat = new Chat($row);
$chat->Send(array(
    'message' => Input::get('message'),
    'author' => $user->data()->username,
    'ts' => date('Y-m-d H:i:s')
));

在调用构造函数之前,您不会创建数据库连接,这会在使用new时发生。

答案 1 :(得分:0)

您正在使用运算符send()访问static函数::盟友(尽管未定义)。因为您在函数中使用$this,所以它期望一个对象是由__construct()方法创建的,但这不会发生在static function中。如果使用Chat创建$chat = new Chat($row)对象的新实例,则$this将引用该函数中的该对象,该对象应使用->运算符调用,如{ {1}}。

$chat->send()

请参阅static keyword的文档:

  

因为静态方法在没有创建对象实例的情况下是可调用的,所以伪变量$ this在声明为static的方法中不可用。