• Daject初探


    前言:

      如果你还不知道Daject是什么,如何使用,可以浏览 http://www.cnblogs.com/kason/p/3577359.html

      github地址:https://github.com/kasonyang/Daject

     

    前两篇博文简单介绍了Daject的两种模型--Table模型和Record模型。细心的朋友可能会发现,Table模型通过select方法读取到的数据只是一些简单的数组,也就是说,通过select方法得到的是简单得数据数组,而不是Record模型。如果你的Record模型并没有进行进行过任何拓展,这似乎无所谓,但是如果你的Record模型进行了扩展,如果只是返回一些简单得数组数据,你对Record模型的任何拓展就派不上什么用途了。

    事实上,Daject是支持直接从Table模型直接读取到Record模型的,那就是selectObject方法。

    先上代码

    //假定数据库里有一张名为user的表,字段为id,name,age,主键为id
    class UserTable extends DajectTableBase{
        protected $keys = array('id');
    }
    class User extends DajectRecordBase{
        function sayHi(){
            echo 'Hi,i am ' . $this->name . '!';
        }
    }
    $tb = new UserTable();
    $users = $tb->selectObject(10);//读取10条记录
    foreach($users as $u){
        $u->age = $u->age + 1;//将记录的age字段值增1
        $u->sayHi();//$u是User的实例
    }

    selectObject和select接受的参数是一样的,差别只是返回的结果不一样,前者返回的是Record数组,而后者返回的是是字段值数组,实际使用时,我更推荐使用selectObject读取数据,因为返回Record模型更能体现OOP的思想,最重要的是Record模型比字段值数组用起来方便!


    注意:并不是任何情况下selectObject都能使用的,一般情况下,从未调用field方法,或者已经已经调用field('*')将字段设置为"*"的情况下,才能使用selectObject。比如以下的代码是有问题的

    $tb = new UserTable();
    $tb->field('count(*)');
    //field已被设置为"count(*)",调用selectObject将会出错
    $users = $tb->selectObject();
  • 相关阅读:
    IOC容器特性注入第六篇:利用MVC注入点,把容器启动
    IOC容器特性注入第五篇:查找(Attribute)特性注入
    以女朋友为例讲解 TCP/IP 三次握手与四次挥手
    Kali信息收集
    Python3 异常处理
    Python3 hasattr()、getattr()、setattr()、delattr()函数
    Python3 常用模块
    Python设计模式——外观模式
    Python设计模式——模版方法模式
    一个很神奇的类
  • 原文地址:https://www.cnblogs.com/kason/p/3602757.html
Copyright © 2020-2023  润新知