您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

在PHP中把对象当数组使用

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 19:53 点击:

   我们了解,JAVASCRIPT中,对象的属性、方法,是可以用数组的模式来访问的。但通常情况下是不可能的。

        为什么要这么做?这是因为,通过这一方式,可以更加方便地操作对象,我们可以定义一个类。而不是定义一个Key Value数组。自然,如果我们还有其它的办法,一种最简单的,就是强制转换成数组。但,这样会失去对象中原有的方法。

        不过,SPL中的ArrayObject可以帮助我们用数组模式访问属性。但方法仍不能实现。

        ArrayObject类结构如下(部分方法是在php5,1或php5.2时才加上的):

Php代码 
ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable {  
/* 常量 */ 
const integer STD_PROP_LIST = 1 ;  
const integer ARRAY_AS_PROPS = 2 ;  
/* 方法 */ 
__construct ([ mixed $input [, int $flags [, string $iterator_class ]]] )  
void append ( mixed $value )  
void asort ( void )  
int count ( void )  
array exchangeArray ( mixed $input )  
array getArrayCopy ( void )  
int getFlags ( void )  
ArrayIterator getIterator ( void )  
int getIteratorClass ( void )  
void ksort ( void )  
void natcasesort ( void )  
void natsort ( void )  
bool offsetExists ( mixed $index )  
mixed offsetGet ( mixed $index )  
void offsetSet ( mixed $index , mixed $newval )  
void offsetUnset ( mixed $index )  
public void serialize ( void )  
void setFlags ( int $flags )  
void setIteratorClass ( string $iterator_class )  
void uasort ( callback $cmp_function )  
void uksort ( callback $cmp_function )  
public void unserialize ( string $serialized )  

ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable {
/* 常量 */
const integer STD_PROP_LIST = 1 ;
const integer ARRAY_AS_PROPS = 2 ;
/* 方法 */
__construct ([ mixed $input [, int $flags [, string $iterator_class ]]] )
void append ( mixed $value )
void asort ( void )
int count ( void )
array exchangeArray ( mixed $input )
array getArrayCopy ( void )
int getFlags ( void )
ArrayIterator getIterator ( void )
int getIteratorClass ( void )
void ksort ( void )
void natcasesort ( void )
void natsort ( void )
bool offsetExists ( mixed $index )
mixed offsetGet ( mixed $index )
void offsetSet ( mixed $index , mixed $newval )
void offsetUnset ( mixed $index )
public void serialize ( void )
void setFlags ( int $flags )
void setIteratorClass ( string $iterator_class )
void uasort ( callback $cmp_function )
void uksort ( callback $cmp_function )
public void unserialize ( string $serialized )
}

        其中:我们为什么可以用 $obj[name] 直接访问到 $obj->name呢? 主要是上面的方法中的三个方法:

        offsetGet 支持$obj[name] 读的方式

        offsetSet 支持$obj[name] 写的方式

        但foreach则是该类对ArrayAccess的函数Current等的默认实现。

        看一个例子代码:

Php代码 
class test extends ArrayObject{  
    public $name;  
    private $age = 21;  
    public function show(){  
        print_r(get_object_vars($this));  
    }  
}  
class test1{  
    public $name;  
    private $age = 21;  
    public function show(){  
 &nbs

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • PHP测试
    • 十天学会php之第六天
    • 几种显示数据的方法的比较
    • 使用xmlhttp为网站增加域名查询功能
    • PHP+MYSQL+Javascript数据库查询结果的动态显示
    • 查找数组中指定键名的值
    • 用redis实现跨服务器session
    • 用新浪微博接口发送图片微博失败的原因
    • smarty局部缓存技术[源码分析]
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1