• ZF框架数据对象映射模式的思考


      最近学了ZF框架,对手册中DB这一节Zend_Db_Table_Row的介绍中说,使用了Zend_Db_Table::find()或::findRow()方法可以返回一个Zend_Db_Table_Row的对象,该对象自动映射到表中的这一行记录,字段和类属性完全关联在一起(字段名是下划线分隔的,属性名由首个单词小写的驼峰式命名,如自动“last_name”,则操作时属性名“lastName”),获取任何字段就直接像操作类属性一样,如:

    $row = $table->fetchRow('first_name = "Robin"');//$table是Zend_Db_Table实例
    echo $row->lastName;//假设输出‘Bill’
    

      而修改的操作超级方便,直接对属性赋值后调用save()方法即可,如:

    $row->lastName = 'Gates';
    $row->save();
    

      数据就会自动更新到表中。之后深究了下源码,大致还是逻辑有点多,所以自己理一理,这里贴出一个简单的集成该思路的类,按照数据对象映射的模式来思考的,可以有助于理解。

    <?php
    
    /**
     * 数据对象映射模式
     *
    class DataMapping
    {
        protected $id;
        protected $data;
        protected $db;
        protected $change = false;
    
        function __construct($id)
        {
            $this->db = Factory::getDatabase();
            $res = $this->db->query("select * from user where id = $id limit 1");
            $this->data = $res->fetch_assoc();
            $this->id = $id;
        }
    
        function __get($key)  //实现对象操作属性的方式来操作表字段值
        {
            if (isset($this->data[$key]))
            {
                return $this->data[$key];
            }
        }
    
        function __set($key, $value)  //对于新的字段可以直接更新进数据表
        {
            $this->data[$key] = $value;
            $this->change = true; 
        }
    
        function __destruct()  //析构器的功能实现save()逻辑
        {
            if ($this->change)
            {
                foreach ($this->data as $k => $v)
                {
                    $fields[] = "$k = '{$v}'";
                }
                $this->db->query("update user set " . implode(', ', $fields) . " where
                id = {$this->id} limit 1");
            }
        }
    }
    

      

  • 相关阅读:
    Linux 删除多余IP地址
    linux 变更网卡后无法联网
    eureka 参数
    C# 一般处理程序使用session注意事项
    asp.net web 简单使用cookie
    asp.net ajax post 请求
    Ajax 的基本使用以及get请求
    asp.net 错误页
    C# winfrom 跨线程访问文本框
    C# winfrom 打印到Excel中
  • 原文地址:https://www.cnblogs.com/youjy-mros/p/4631562.html
Copyright © 2020-2023  润新知