我收到了这个我以前从未得过的奇怪错误。
致命错误:不在对象上下文中时使用$ 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')
));
弹出错误。
答案 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的方法中不可用。