在php5中,更是发扬了Array,php内置了一些类和接口,
允许你创建你自己的数据结构。Magento充分利用了这一点,
在使用Varien_Data_Collection来做数据收集的时候,
它实现了php内置IteratorAggregate对象迭代器和Countable两个接口。
下面是用php内置类ArrayObject的一个例子。
$array=new ArrayObject();
class Mycollection extends ArrayObject{}
$collection=new Mycollection();
$collection[]='bar';
var_dump($collection);
//object(Mycollection)#2 (1) { ["storage":"ArrayObject":private]=> array(1) { [0]=> string(3) "bar" } }
<?php
/*
* Created by PhpStorm.
* User:ajiang-tuzhi
* QQ:1050653098@qq.com
* WebSite:www.weicot.com
* Date: 2015/11/11
* Time: 10:25
*/
class Aps_Weicot_thingController extends Mage_Core_Controller_Front_Action{
public function indexAction()
{
$thing_1 = new Varien_Object();
/*创建一个数据收集器</H4< p>
首先,我们创造一些新的对象。*/
$thing_1->setName('jiang');
$thing_1->setAge('20');
$thing_2 = new Varien_Object();
$thing_2->setName('ajiang');
$thing_2->setAge('21');
$thing_2->setLastName('tuzhi');
/* Magento中所有的Model都继承Varien_Object,
在面向对象编程中,这样做的好处是当你想往多个Model中添加方法的时候,
你只需要简单地修改一个文件即可。
在继承Varien_Object的类中,有两个魔术方法,get/set,
你可以很方便的向对象中加入一个属性(值),
让我们看个例子。*/
//var_dump($thing_2->getName());
//var_dump($thing_1->getData());
//string(6) "ajiang" array(2) { ["name"]=> string(5) "jiang" ["age"]=> string(2) "20" }
/* 这个归功于php5的新特性,ArrayAccess接口。
也是 “Object Oriented Programming”.
现在然我们把这些对象加到数据收集器Varien_Data_Collection中。
很多程序员将Collection看成是数组,
当然我不反对。*/
$collection_of_things=new Varien_Data_Collection();
$collection_of_things
->addItem($thing_1)
->addItem($thing_2);
/*大多数Magento data Collections继承于Varien_Data_Collection,你可以使用里面的任何一个方法。
那么我们可以做些什么呢?接下来我们使用foreach去循环它。*/
foreach($collection_of_things as $thing){
// var_dump($thing->getData());
}
//array(2) {
// ["name"]=> string(5) "jiang"
// ["age"]=> string(2) "20" }
// array(3) {
// ["name"]=> string(6) "ajiang"
// ["age"]=> string(2) "21"
// ["last_name"]=> string(5) "tuzhi" }
// var_dump($collection_of_things->getFirstItem()); //获取第一个数据 和最后一个数据
//object(Varien_Object)#74 (7) {
// ["_data":protected]=> array(2) { ["name"]=> string(5) "jiang" ["age"]=> string(2) "20" }
// ["_hasDataChanges":protected]=> bool(true)
// ["_origData":protected]=> NULL
// ["_idFieldName":protected]=> NULL
// ["_isDeleted":protected]=> bool(false)
// ["_oldFieldsMap":protected]=> array(0) { }
// ["_syncFieldsMap":protected]=> array(0) { } }
$collection_of_things->getLastItem()->getData();//h获取最后一个数据
//array(3) { ["name"]=> string(6) "ajiang" ["age"]=> string(2) "21" ["last_name"]=> string(5) "tuzhi" }
var_dump($collection_of_things->toXml());//输出为xml
/*
<?xml version="1.0" encoding="UTF-8"?>
<collection>
<totalRecords></totalRecords>
<items><item>
<name><![CDATA[jiang]]></name>
<age><![CDATA[20]]></age>
</item>
<item>
<name><![CDATA[ajiang]]></name>
<age><![CDATA[21]]></age>
<last_name><![CDATA[tuzhi]]></last_name>
</item>
</items>
</collection>"*/
//只取某一段的值
//var_dump($collection_of_things->getColumnValues('name'));
//array(2) { [0]=> string(5) "jiang" [1]=> string(6) "ajiang" }
//基本的过滤功能
var_dump($collection_of_things->getItemByColumnValue('name','ajiang'));
//string(335) " " object(Varien_Object)#28 (7) {
// ["_data":protected]=> array(3) {
// ["name"]=> string(6) "ajiang"
// ["age"]=> string(2) "21"
// ["last_name"]=> string(5) "tuzhi" }
// ["_hasDataChanges":protected]=> bool(true)
// ["_origData":protected]=> NULL
// ["_idFieldName":protected]=> NULL
// ["_isDeleted":protected]=> bool(false)
// ["_oldFieldsMap":protected]=> array(0) { }
// ["_syncFieldsMap":protected]=> array(0) { } }
/*模型数据收集器(Model Collections)
前面我们有提到,所有Magento的模型数据收集器都继承Varien_Data_Collectionm,
所以理论上我们可以使用之前的所有方法。
下面让我们以product模型实战下。*/
}
}