【问题标题】:abstract record摘要记录
【发布时间】:2013-02-19 20:55:56
【问题描述】:

我正在尝试创建自动机制,该机制将使用抽象类将数据从数据库加载到对象中,并在必要时进行扩展。

这是我的简化想法,目前不起作用,所以如果有人能解释我为什么以及我做错了什么:

抽象类:

abstract class abstractRecord{

    public $data = array();

    public function __constructor($id = null){
        global $db; // eg. PDO
        $this->db = $db;


        if(!is_null($id) && intval($id) > 0)
            $this->fillData($id);

    }

    public function fillData($id){

        $this->data = $db->getAll("SELECT * FROM ".self::$table." WHERE ".self::$id."='$id'");

    }

}

现在一些类将扩展abstratRecord,并且如果提供了有效的ID,则应该在初始化时使用abstract的构造函数来填充数据

class User extends abstractRecord{

    public static $id = "`id`";
    public static $table = "`users`";

    // some other functions for controlling user...


}

在最后的使用

$user = new User(15);  // so user data from db with id=15 should be loaded into object data property by abstractRecord class

所以这只是简单的版本,应该有更多的验证,getter setter 接口....

现在只想知道这里出了什么问题以及原因,是否可以在不调用 parent::__constructor() 的情况下使用此流程,据我所知,在这种情况下类应该扩展抽象 __constructor,或者也许我错了吗?

【问题讨论】:

    标签: php constructor abstract


    【解决方案1】:

    您的抽象类的构造方法拼写错误。需要是__construct()。然后你需要在扩展类中调用该构造函数,如下所示:

    class User extends abstractRecord{
        public function __construct() {
            // call to abstractRecore construct
            parent::__construct();
        }
    }
    

    【讨论】:

    • 啊,是的,解决了一些问题,现在我在访问抽象类在子类中定义的属性时遇到问题,这对于功能非常重要,所以如果我定义 public static $table = "table_name" i需要能够在抽象类中使用此属性...
    【解决方案2】:

    好的,我设法解决了问题并建立了工作机制,所以它看起来像这样:

    抽象类 abstractRecord{

    protected $data = array();
    public static $table;
    public static $pK;
    
    public function __construct($id = null, $table = false, $pK = false){
    
    if($table == false || $pK == false)
        return false;
    
    self::$table = $table;
    self::$pK = $pK;
    
    if (!is_null($id) && intval($id) > 0)
            $this->fillData($id);
    
    }
    
    protected function fillData($id){
        global $db; // db solution
    
        $this->data = $db->("SELECT * FROM ".self::$table." WHERE ".self::$pK."='$id' LIMIT 1");
    
    }
    
    // some other useful functions
    

    }

    某类

    类用户扩展 abstractRecord{

    public static $table =  " `users` ";
    public static $pK = " `userID` ";
    
    public function __construct($id = null){
    
        parent::__construct($id, self::$table, self::$pK);
    }
    
    // some other functions ...
    

    }

    对不起,如果有什么拼写错误...

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多