YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因
在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性
为什么呢?其实这与CModel实现的接口相关,接下来我们看下其实现的整个过程
对于一个我们定义的model,它会继承虚类CActiveRecord,CActiveRecord类继承于CModel,如下所示:

class special extends CActiveRecord {

}

abstract class CActiveRecord extends CModel{

}

最关键的地方是CModel类实现了IteratorAggregate接口。
而在CModel类中实现的getIterator方法返回的是这个model的所有属性,使用的迭代器是Yii框架实现的CMapIterator,而CMapIterator实现了Iterator接口

同样的道理,
因为CModel实现了ArrayAccess接口,所以可以直接访问以数组的方式访问

转自

http://blog.sina.com.cn/s/blog_60a5a7e00100uyat.html

时间: 2024-10-11 13:49:36

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因的相关文章

使用Yii框架中遇到的三个问题

以下由我们在信易网络公司开发项目的时候终结出的一些经验 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应用的配置文件,保存Application的各种参数,直接return数组.在使用的过程中,因为main.php文件一定会被Yii提前加载,所以将一些全局性的操作也放在了此文件,加载一些类操作啥的没有什么问题,当有一次加了一个全局变量,并且在其它地方使用global获取全局变量时,发现无论我如何努力都得到的是NULL.各种尝试后,终

Yii框架中使用mongodb扩展

前提条件:安装了mongodb数据库 安装了mongo的php驱动 下载Yii的mongo扩展: 下载链接:http://pan.baidu.com/s/1rPtx0 官方下载链接:https://github.com/canni/YiiMongoDbSuite 得到文件:YiiMongoDbSuite.tar.gz 解包,并将该文件放至应用的/protected/extensions文件夹下面 确保文件夹名称为:YiiMongoDbSuite 配置应用 1 vi /protected/conf

Yii 框架中安装 memcache 及配置和测试

安装php_memcache.dll扩展 1.首先将php_memcache.dll文件放入E:\server\php\ext目录下 (php_memcache.dll下载地址:http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/)   一定要根据自己的php版本以及Thread Safety来下载相应的php_memcache.dll,Thread Safety可以在   phpinfo()中查看,enabled表示ts版

YII框架中save()和insert()的用法差异

要了解YII框架中save()和insert()的用法差异,首先查看一下手册中关于两个方法的定义: http://www.yiichina.com/api/CActiveRecord#save-detail save() 方法 源码: framework/db/ar/CActiveRecord.php#784 保存当前的记录. 插入记录到数据表的一行, 如果它的isNewRecord属性为true(通常情况下使用的‘new’运算符来创建记录). 否则, 将被用于更新表中的相应行(通常情况下,使用

yii框架中关于控制器中filter过滤器和外部action的使用

在yii框架中,控制器的过滤器分为执行前和执行后,这里举例是在执行控制器前的过滤. 需要在components/文件夹下定义公共的TestAction.php文件,并且实现run()方法.这个action是各个控制器公用的. class TestController extends Controller { /** * 定义外部的action * @return array */ public function actions() { return array( 'testa' => array

Yii框架中使用PHPExcel导出Excel文件

最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 5 6 7 8 // autoloading model and component classes     'import'=>array(                  'application.models.*',         'application.components.*',

可以使用foreach遍历循环的条件

大话C#中能使用foreach的集合的实现 转自:http://www.cnblogs.com/tangzhengyue/p/3339936.html 大家都知道foreach的语法: foreach(var item in items) { Console.Writeln(item); } 通过这样一个简单的语句,就能实现遍历集合items中的所有元素. 那么,集合类(注意不是集合中的元素的类)是要满足什么条件才能用foreach遍历呢? 就像买衣服需要去找到卖衣服的人一样,要使用foreac

Yii框架中如何使用Yii::t()实现文本信息翻译和文件翻译

1.设置本地化语言 在protected/config文件夹下的main.php中做如下设置: return array( 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 'name'=>'My Web Application', 'sourceLanguage'=>'en_us', 'language'=>'zh_cn', 2.定义翻译文件 这里我使用的时通过PHP文件实现文本信息翻译(更多方法说明参考Yii框架官方

Yii框架中的SQL用法

Yii框架的SQL User::find()->all(); //返回所有用户数据: User::findOne($id); //返回 主键 id=1 的一条数据: User::find()->where(['name' => 'ttt'])->one(); //返回 ['name' => 'ttt'] 的一条数据: User::find()->where(['name' => 'ttt'])->all(); //返回 ['name' => 'ttt'