当前位置:首页 > 开发 > 编程语言 > PHP > 正文

PHP : ActiveRecord实现示例

发表于: 2013-02-11   作者:dcj3sjt126com   来源:转载   浏览次数:
PHP
摘要: 先简单介绍一下Active Record: Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将

先简单介绍一下Active Record:

Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将这种关系映射为对象的关联和聚集。
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
Active Record 驱动框架一般兼有 ORM 框架的功能,但 Active Record 不是简单的 ORM,正如和 Row Gateway 的区别。著名的例子是全栈(Full Stack) Web 开发框架 Ruby on Rails ,其默认使用一个纯 Ruby 写成的 Active Record 框架来驱动 MVC 中的模型层。
在 Martin Fowler 的 《企业应用架构模式》 一书中曾详细叙述了本模式。
以下是著名的 Active Record 驱动框架:
SQLObject(Python)
Ruby on Rails ActiveRecord (Ruby)
Yii Framework ActiveRecord (PHP)
Castle ActiveRecord (.NET)
<?php
define('DBHOST', 'localhost');
define('DBUSER', 'root');
define('DBPASS', '');
define('DBNAME', 'test');
define('TABLE_PREFIX', 't_');
class ActiveRecord {
    private $tablepre;
    private $class;
    private $table;
    private static $link;
    private $data;
    
    public $primaryKey = 'id';
    
    public function __construct() {
        $this->tablepre = TABLE_PREFIX;
        $this->class = get_class($this);
        $this->table = $this->tablepre . strtolower($this->class);
        $this->data = array();
        $this->connect();
    }
    
    private function connect() {
        if(!self::$link) {
            self::$link = mysql_connect(DBHOST, DBUSER, DBPASS);
            mysql_select_db(DBNAME);
        }
        return self::$link;
    }
    
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    
    private function implodefields($cond) {
        $fields = array();
        foreach($cond as $key => $value) {
            $value = mysql_real_escape_string($value);
            $fields[] = "`$key`='$value'";
        }
        return implode(', ', $fields);
    }
    
    public function add() {
        $fields = $this->implodefields($this->data);
        $sql = "INSERT INTO `{$this->table}` SET $fields";
        $this->query($sql);
    }
    
    public function findById($id) {
        $sql = "SELECT * FROM `{$this->table}` WHERE `{$this->primaryKey}`='$id' LIMIT 1";
        $data = $this->getOne($sql);
        return $this->makeObjFromArray($data);
    }
    
    private function makeObjFromArray($data) {
        $obj = new $this->class;
        foreach($data as $key => $value) {
            $obj->$key = $value;
        }
        return $obj;
    }
    
    private function query($sql) {
        echo $sql . "\n";
        return mysql_query($sql, self::$link);
    }
    
    private function getOne($sql) {
        $data = $this->query($sql);
        if($data) {
            $item = mysql_fetch_assoc($data);
            return $item;
        }
        return false;
    }
}

class User extends ActiveRecord {
    var $primaryKey = 'id';
}

$user = new User();
$user->name = '热电影';
$user->email = 'www.redianying.com';
$user->add();

$user = $user->findById(1);
print_r($user); 

 

PHP : ActiveRecord实现示例

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
很好很实用的转载.. PHP分页技术的代码和示例 2011年8月14日 陈皓 发表评论 阅读评论 3,634 次点击
很好很实用的转载.. PHP分页技术的代码和示例 2011年8月14日 陈皓 发表评论 阅读评论 3,634 次点击
很好很实用的转载.. PHP分页技术的代码和示例 2011年8月14日 陈皓 发表评论 阅读评论 3,634 次点击
本文来自:10 Helpful PHP Pagination Scripts For Web Developers 分页是目前在显示大量结果时所采
2个php测试文件 server.php //phpinfo(); //确保在连接客户端时不会超时 set_time_limit(0); $ip =
本文来自:10 Helpful PHP Pagination Scripts For Web Developers 分页是目前在显示大量结果时所采
很好很实用的转载.. PHP分页技术的代码和示例 2011年8月14日 陈皓 发表评论 阅读评论 3,634 次点击
php裁剪图片代码示例 一般用户上传头像时,都会让用户自行裁剪图片。那么php怎么实现这个功能呢?ph
RabbitMQ是流行的开源消息队列系统,用erlang语言开发,完整的实现了AMQP(高级消息队列协议)。网
RabbitMQ是流行的开源消息队列系统,用erlang语言开发,完整的实现了AMQP(高级消息队列协议)。网
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号