2013-03-19 4 views
1

Я работал с cakePHP в прошлом и любил то, как они строили свою модельную систему. Я хочу включить их идею обработки проверки между расширенными моделями.Передача свойств от дочернего объекта родительскому PHP

Вот пример:

class users extends model { 
    var $validation = array(
     "username" => array(
      "rule" => "not_empty" 
     ), 
     "password" => array(
      "rule" => "valid_password" 
     ) 
    ); 

    public function create_user() { 
     if($this->insert() == true) { 
      return true; 
     } 
    } 
} 



class model { 

    public function insert() { 
     if(isset($this->validation)) { 
      // Do some validation checks before we insert the value in the database 
     } 
     // Continue with the insert in the database 
    } 
} 

Проблема с этим в том, что модель не имеет возможности получать правила проверки, как это родительский класс. Есть ли способ передать свойство $ validation родительскому классу, не передавая явно правила проверки, используя метод create_user() в качестве параметра?

РЕДАКТИРОВАТЬ:

Кроме того, во избежание передачи его с помощью метода __construct() для родительского класса. Есть ли другой способ сделать это, что не приведет к большому количеству дополнительного кода в классе моих пользователей, но чтобы класс модели выполнял большую часть работы (если не все?)

ответ

1

Если экземпляр $user, вы можете просто обратитесь к $this->validation в model::insert().

Казалось бы, model также должен быть abstract в этом случае, предотвращая создание и, возможно, путаницу.

0

Создайте новый абстрактный метод в классе model с именем: isValid(), который должен реализовать каждый производный класс, а затем вызвать этот метод во время функции insert().

model класс:

class model { 

abstract protected function isValid(); 

public function insert() { 
    if($this->isValid())) { // calls concrete validation function 

    } 
    // Continue with the insert in the database 
} 

}

user класс:

class users extends model { 
var $validation = array(
    "username" => array(
     "rule" => "not_empty" 
    ), 
    "password" => array(
     "rule" => "valid_password" 
    ) 
); 

protected function isValid() { 
    // perform validation here 
    foreach ($this->validation) { //return false once failed } 

    return true; 
} 

public function create_user() { 
    if($this->insert() == true) { 
     return true; 
    } 
} 
}