2014-01-24 2 views
-1

Я получаю следующее сообщение об ошибке: Фатальная ошибка:Фатальная ошибка: Вызов функции члена ГЭТ() на не-объект в

вызов функции члена ГЭТ() на не-объект в

Я создал публичную функцию get(), чтобы получить данные sql, которые были запрошены.

В настоящее время я работаю над этапом проверки, и я включил функцию get, чтобы проверить базу данных, чтобы узнать, зарегистрирована ли учетная запись электронной почты.

Я создал следующие правила с помощью массива:

$validation = $validate->check($_POST, array(
               'fName' => array(
                'required' => true, 
                'min' => 2, 
                'max' => 20), 

               'lName' => array(
                'required' => true, 
                'min' => 2, 
                'max' => 20), 

               'regEmail' => array(
                'required' => true, 
                'min' => 2, 
                'max' => 50, 
                'unique' => 'customers'), 

               'regEmailCon' => array(
                'required' => true, 
                'min' => 2, 
                'max' => 50, 
                'matches' => 'regEmail'), 

               'regPword' => array(
                'required' => true, 
                'min' => 6, 
                'max' => 12), 

               'regPwordCon' => array(
                'required' => true, 
                'matches' => 'regPword'), 
               )); 

здесь код, который используется для выполнения проверки:

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

      $value = trim($source[$item]); 
      $item = escape($item); 

      if($rule === 'required' && empty($value)){ 
       $this->addError("{$item} is required"); 
      }elseif (!empty($value)){ 
       switch ($rule){ 
        case 'min': 
         if(strlen($value) < $rule_value){ 
          $this->addError("{$item} must be a minimum of {$rule_value} characters."); 
         } 
        break; 
        case'max': 
         if(strlen($value) > $rule_value){ 
          $this->addError("{$item} must be a maximum of {$rule_value} characters."); 
         } 
        break; 
        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; 


       } 
      } 
     } 
    } 

Все случаи работать, пока не дойдете до ГЭТ() Function. Я не уверен, в чем проблема. Какие-либо предложения?

Алиби, Мои извинения,

вот что я сделал в начале класса:

class Validation{ 
private $_passed = false, 
     $_errors= array(), 
     $_db = null; 

public function _construct(){ 
    $this->_db = DB::getInstance(); 
}/*end _construct*/ 

путем добавления собственной переменной _db, я надеялся сохранить DB :: GetInstance() функция из одноэлементного шаблона.

Благодаря миллион

+0

что такое $ this -> _ db обратитесь к? Что-то в рамках этой функции? –

+0

Одноэлементный шаблон не является хорошей практикой. Вместо этого создайте новый объект базы данных и передайте его конструктору. Эта хорошая практика называется инъекцией зависимостей. – m59

ответ

1

Это означает, что $this->_db не является объектом, который имеет метод, называемый get. Для того, чтобы ваш код работать, вам нужно что-то вроде этого существуют:

В классе, который имеет функцию check:

public function __construct($_db) { 
    //this is how `check` will get access to a `db` object as a property ("this->$_db") 
    $this->$_db = $_db; 
} 

При создании экземпляра этого класса:

$_db = new db(); //this has a method "get" 
//pass the $_db object to the class 
$myClass = new MyClass($_db); 

и db класс:

class db { 
    //this is where the db object is given a method "get" 
    public function get() { 

    } 
} 
Смежные вопросы