将属性从子对象传递到父PHP

时间:2013-03-19 22:01:44

标签: php oop class inheritance

我过去曾与cakePHP合作过,喜欢他们建立模型系统的方式。我想结合他们在扩展模型之间处理验证的想法。

以下是一个例子:

 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()方法将其传递给父类。是否有另一种方法可以在我的用户类中引入大量额外的代码但是让模型类完成大部分工作(如果不是全部的话?)

2 个答案:

答案 0 :(得分:1)

如果实例是$user,您只需引用$this->validation中的model::insert()

在这种情况下,似乎model也应该是abstract,这样可以防止实例化,甚至可能造成混淆。

答案 1 :(得分:0)

在名为model的{​​{1}}类中创建一个新的抽象方法,每个派生类必须实现,然后在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