`
dcj3sjt126com
  • 浏览: 1883845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP : ActiveRecord实现示例

    博客分类:
  • PHP
php 
阅读更多

先简单介绍一下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); 

 

分享到:
评论

相关推荐

    yii2-activerecord-inheritance:ActiveRecord Inheritance是为Yii2框架提供类表继承模式的实用程序

    $ php composer.phar require jlorente/yii2-activerecord-inheritance " * " 或添加 ... " require " : { ... " jlorente/yii2-activerecord-inheritance " : " * " } 到composer.json文件的require部分。 ...

    PHPActiveRecord-开源

    **PHPActiveRecord 开源介绍** PHPActiveRecord 是一个基于 PHP 的 ORM(对象关系映射)框架,它为 PHP 开发者提供了类似于 Ruby on Rails 中 ActiveRecord 模式的功能。这个库的目标是简化数据库操作,使开发者...

    Working with Database(数据库开发工作).docx

    - **定义**:ActiveRecord是Yii框架中的一个重要组件,它实现了对象关系映射(ORM)的模式,简化了数据库操作。在这个模式下,每个类通常对应数据库中的一个表,而每个实例则代表表中的一行数据。 - **特点**: - **...

    php_rest:带有php的示例rest-api

    "php_rest"项目就是这样一个使用PHP实现的REST API示例。 在"php_rest-develop"目录中,我们可以期待找到一个包含API核心逻辑、路由定义、数据库交互等组件的开发版本。REST API通常包括以下部分: 1. **路由...

    php开发培训最全学习大纲.docx

    2. 用户登录原理:实现用户身份验证和会话管理。 3. Session入库原理:将Session数据存储在数据库中,增强安全性。 4. 图片验证码:创建防止机器人自动操作的安全措施。 5. 树状货品分类:使用递归或预排序遍历算法...

    Yii框架实现对数据库的CURD操作示例

    本文实例讲述了Yii框架实现对...//继承ActiveRecord实现CURD操作 class user extends ActiveRecord { } 后面的代码中命名空间都已经省略 namespace app\controllers; use yii\web\Controller; use app\models\use

    php-yii-api.zip

    3. **ActiveRecord**:Yii 的 ActiveRecord 实现是一种对象关系映射(ORM),它允许开发者通过对象的方式操作数据库记录。每个 ActiveRecord 类对应数据库中的一个表,类的实例则代表表中的行。 4. **组件系统**:...

    基于PHP的TPFrame免费开源框架源码PHP版.zip

    8. 数据库操作:TPFrame可能包括ORM(对象关系映射)层,简化了数据库查询和操作,例如使用ActiveRecord模式或QueryBuilder。 9. 安全性:一个良好的框架会考虑安全方面,如SQL注入防护、XSS防护、CSRF令牌等。 10...

    PHP实例开发源码-小三php框架.zip

    如果它是源代码文件,那么可能是框架的核心组件或者一个特定功能的实现。如果是一个示例应用,那么开发者可以通过它来学习如何在实际项目中运用小三PHP框架。 在学习和使用小三PHP框架时,理解以下几点至关重要: ...

    YII 数据库操作之 Active Record

    读取记录则可以通过多种方式实现。例如,按条件查找第一条匹配的记录: ```php $post = Post::model()-&gt;find($condition, $params); ``` 或者,通过主键值查找: ```php $post = Post::model()-&gt;findByPk($postID...

    PHP一个完整的列子

    在PHP开发中,"一个完整的例子"通常指的是涵盖多个核心功能的示例项目。在这个例子中,我们重点讨论的是基于YII框架实现的PHP应用,其中包括了网页分页、数据的增删改查(CRUD)以及自定义类的封装。 1. **PHP分页*...

    php项目开发完全文档

    - **ActiveRecord基础**:介绍数据访问层的实现机制,包括数据模型的定义、CRUD操作等。 - **模板输出**:阐述如何使用模板引擎生成HTML页面。 - **AJAX支持**:演示如何集成AJAX功能,提升用户体验。 - **异常处理*...

    CakePHP快速的PHP开发框架官方库

    2. **ActiveRecord**:CakePHP采用ActiveRecord模式,将数据库表映射为PHP类,简化了数据库操作。每个记录对应一个对象,对象的方法可以直接操作数据库,比如CRUD(创建、读取、更新、删除)操作。 3. **Routing**...

    基于PHP的ThinkPHP PHP框架 完整包.zip

    2. **自动路由**:框架提供了强大的URL路由功能,可以根据预定义的规则将URL映射到特定的控制器方法,实现灵活的URL管理和RESTful API设计。 3. **数据库操作**:ThinkPHP的ActiveRecord风格的模型类使得数据库操作...

    yii2-basic-rest-api-app:rest api的示例应用程序

    这个示例应用将展示如何在Yii2中定义这些资源并实现相应的操作。 3. **Yii2的RESTful API支持**:Yii2提供了一个方便的RESTful API组件,可以轻松地将模型映射到API资源。通过配置`config/web.php`中的`urlManager`...

    jfinal手册

    - **IocInterceptor 使用示例**:通过 IocInterceptor 实现 Spring Bean 的注入。 #### 九、Validator 验证器 - **概述**:Validator 提供了数据验证功能,确保数据的正确性和安全性。 - **Validator 配置**:...

    Agile.Web.Application.Development.with.Yii1.1.and.PHP5

    《Agile.Web.Application.Development.with.Yii1.1.and.PHP5》这本书是关于敏捷...提供的源代码(Agile.Web.Application.Development.with.Yii1.1.and.PHP5.Code.zip)将帮助读者实战演练书中的示例,加深理解和应用。

    ChatifyLaravel包演示应用程序_PHP_Blade_下载.zip

    Chatify Laravel 包是一个专为 Laravel 框架设计的实时聊天应用解决方案,它使得在 Laravel 项目中集成聊天功能变得简单快捷。...通过学习这个示例,开发者能够快速掌握如何在自己的 Laravel 项目中实现类似功能。

    浅谈PHP的数据库接口和技术

    以下知识点详细介绍了PHP支持的数据库类型、原生操作数据库的方法、PDO概念、ActiveRecord以及何时使用DAO(数据访问对象)或ActiveRecord。 PHP支持的数据库接口: PHP语言提供了对多种数据库系统的支持,包括但...

Global site tag (gtag.js) - Google Analytics