【问题标题】:Call to member function on a non-object with instance variable [duplicate]使用实例变量调用非对象的成员函数[重复]
【发布时间】:2013-11-16 03:31:17
【问题描述】:

我有以下代码,运行时返回此错误:

PHP 致命错误:在第 36 行的 /classes/User.php 中的非对象上调用成员函数 count()

public function find($user = null) {
    if($user) {
        $field = (is_numeric($user)) ? 'id' : 'email';
        $data = $this->_db->get('*', 'users', array($field, '=', $user));
        if($data->count()) { // This is line 36, the $_db variable is an instance of the DB class
            $this->_data = $data->first();
            return true;
        }
    }
    return false;
}

我错过了什么让 $data 不引用对象?

【问题讨论】:

  • 错误消息与$_db 变量无关。关于$data。查看您的 ->_db->get() 方法的文档以了解它是否应该返回一个对象。

标签: php oop object count instance


【解决方案1】:

这很简单,虽然解决方案可能不是:$this->_db->get 没有返回对象。取决于_db 是什么——它是一个抽象层吗?一些疯狂的自制东西?只看语法:

$this->_db->get('*', 'users', array($field, '=', $user));

我有点奇怪 - 假设它描述了键是如何与搜索值分开的,我从未见过这样的数据库层(以及 SQL 多久改变一次= 所做的事情,无论如何?)我'我愿意打赌你的数据库层需要一些关注,但这可能有点社论。 ;)

无论它是什么,它都会返回错误 - (不幸的是)对象库返回 FALSE 而不是带有错误代码的对象是相当普遍的。它甚至可能返回一个错误 字符串。 回声那个坏男孩,看看你得到了什么,然后解决任何导致它的问题。

【讨论】:

  • DB 类是抽象的。 get() 的参数基本上意味着 SELECT * FROM users WHERE $field = $user 应该返回一个 PDO 对象。
  • 是的,我就是这么说的。所以你要包装 PDO?为什么?
猜你喜欢
  • 2010-09-08
  • 2016-01-01
  • 1970-01-01
  • 2011-05-28
  • 2014-06-05
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多