在第23行的非对象上调用成员函数count()

时间:2014-12-11 06:12:45

标签: php

无法理解为什么我无法计算()代码中的$ check变量。代码假设是检查sql是否返回了任何值。

如果我需要提交更多信息,请告诉我。

<?php
class Validate {
    private $_passed = false,
            $_errors = array(),
            $_db = null;


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

    public function check($source, $items = array()) {
        foreach($items as $item => $rules) {
            foreach($rules as $rule => $rule_value) {
                $value = $source[$item];

                if($rule === 'required' && empty($value)) {
                    $this->addError("{$item} is required");
                } else if(!empty($value)){
                    switch($rule) {
                        case 'matches':
                            if($value!=$source[$rule_value]) {
                                $this->addError("{$rule_value} must match {$item}");
                            }
                        break;
                        case 'unique':
                            $check = $this->_db->get($rule_value, array($item, '=', $value));
                            if ($check->count()) {
                                $this->addError("{$item} already exists.");
                            }
                        break;
                    }
                }
            }
        }
        if(empty($this->_errors)) {
            $this->_passed = true;
        }
        return $this;
    }

    private function addError($error) {
        $this->_errors[] = $error;
    }

    public function errors() {
        return $this->_errors;
    }

    public function passed() {
        return $this->_passed;
    }
}
?>

2 个答案:

答案 0 :(得分:2)

根据你的问题,$count是一个变量(数组/变量),你正在调用它的成员函数。

但是,它不是一个对象。

count()是在PHP函数中构建的。

您需要更改:

if ($check->count()) {

if (count($check)) {

count()

答案 1 :(得分:1)

你想做数($ check)。 $ check不是一个类。