php 以数组形式访问对象

官方文档上:

ArrayAccess {
/* Methods */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}

  

实现上面的方法,下面举个实例

<?php
/**
 * Created by PhpStorm.
 * User: wangHan
 * Date: 2016/10/21
 * Time: 14:07
 */
class Human implements ArrayAccess
{
    private $elements;

    public function __construct()
    {
        $this->elements = [
            "boy" => "male",
            "girl" => "female"
        ];
    }

    public function offsetExists($offset)
    {
        // TODO: Implement offsetExists() method.
        return isset($this->elements[$offset]);
    }

    public function offsetGet($offset)
    {
        // TODO: Implement offsetGet() method.
        return $this->elements[$offset];
    }

    public function offsetSet($offset, $value)
    {
        // TODO: Implement offsetSet() method.
        $this->elements[$offset] = $value;
    }

    public function offsetUnset($offset)
    {
        // TODO: Implement offsetUnset() method.
        unset($this->elements[$offset]);
    }
}

$human = new Human();
$human[‘people‘] = "boyAndGirl"; ////自动调用offsetSet
if(isset($human[‘people‘])) {   ////自动调用offsetExists
    echo $human[‘boy‘];//自动调用offsetGet
    echo ‘<br />‘;
    unset($human[‘boy‘]);//自动调用offsetUnset
    var_dump($human[‘boy‘]);
}
// // 输出结果  male   null

<?php
/**
* Created by PhpStorm.
* User: wangHan
* Date: 2016/10/21
* Time: 14:07
*/class Human implements ArrayAccess
{private$elements;

publicfunction __construct()
{$this->elements = [
"boy" => "male",
"girl" => "female"
];
}

publicfunction offsetExists($offset)
{// TODO: Implement offsetExists() method.returnisset($this->elements[$offset]);
}

publicfunction offsetGet($offset)
{// TODO: Implement offsetGet() method.return$this->elements[$offset];
}

publicfunction offsetSet($offset, $value)
{// TODO: Implement offsetSet() method.$this->elements[$offset] = $value;
}

publicfunction offsetUnset($offset)
{// TODO: Implement offsetUnset() method.unset($this->elements[$offset]);
}
}

$human = new Human();
$human[‘people‘] = "boyAndGirl"; ////自动调用offsetSetif(isset($human[‘people‘])) { ////自动调用offsetExistsecho$human[‘boy‘];//自动调用offsetGetecho‘<br />‘;
unset($human[‘boy‘]);//自动调用offsetUnset
var_dump($human[‘boy‘]);
}
// // 输出结果 male null

原文地址:https://www.cnblogs.com/burningc/p/9092829.html

时间: 2024-08-01 18:39:48

php 以数组形式访问对象的相关文章

数组形式访问对象

<?php//数组形式访问对对象/** * 1.通过继承PHP内置接口ArrayAccess来实现 * 2.必须实现方法:offsetExists,offsetGet,offsetSet,offsetUnset; */class NewObject implements ArrayAccess{    /**     * 检查一个偏移位置是否存在     * @param mixed $offset     * @return bool     */    public function off

js添加key为数字的对象,通过类似于通过访问数组的中括号形式访问对象属性

var obj={};obj[1] = "mm";obj[2]="nn";console.log(obj[1]); 同var obj={};obj["1"] = "mm";obj["2"]="nn";console.log(obj["1"]); 其实创建对象的时候还可以这么写 var obj={};obj["mm"] = "mm"

数组式访问-ArrayAccess

以前对ArrayAccess不是很熟悉,现在整理下下有关ArrayAccess相关的知识,ArrayAccess接口就是提供像访问数组一样访问对象的能力的接口. 接口内容如下: ArrayAccess { //检查一个偏移位置是否存在 abstract public boolean offsetExists ( mixed $offset ); //获取一个偏移位置的值 abstract public mixed offsetGet ( mixed $offset ); //设置一个偏移位置的值

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

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

类中属性返回形式(对象,关联数组,索引数组)

class A { public $x, $y; function __construct($x, $y)  { $this->x = $x; $this->y = $y; } function get_value($arr = true)  { if($arr == 'arr')   { // 类中属性以关联数组形式转换返回 return get_object_vars($this); }else if($arr == 'obj')   { //类中属性以对象形式返回 return $thi

javascript对象属性和数组的访问

javascript对象属性的访问 假如有对象test:var test = {  "a":1,  "b":2};直接访问对象test的属性a的值,有两种方法: 1.test.a; 2.test["a"];   (注意这里要用引号) 但若是用for/in语句访问对象的属性值,则必须用“[]”运算符啦:    for(m in test){        alert(test[m]);        alert(test.m);   //这里会弹出

HTML-JS 数组 内置对象

[JS中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下标访问数组的每个元素 2.如何声明一个数组 ① 使用字面量声明:var arr=[]; 在JS中,同一数组可以存储各种数据类型. 例如:var arr=[1,"2",true,4,{}]; ② 使用new关键字明,var arr= new Array(参数); >>>参数可以是: a.省略,表示创建一个空数组 b.参数为一个整数,表示声明一个

《C++ Primer》 对象、数组、基于对象设计、泛型设计

数组 C++ 不支持数组的抽象 abstraction 也不支持对整个数组的操作我们有时会希望对整个数组进行操作例如把一个数组赋值给另外一个数组对两个数组进行相等比较或者想知道数组的大小 size 例如给出两个数组我们不能用赋值操作符把一个数组拷贝到另一个中去. int array0[ 10 ], array1[ 10 ]; array0 = array1;  // error 数组类型本身没有自我意识它不知道自己的长度我们必须另外记录数组本身的这些信息. 数组和指针的关系: int ia[]

js 数组去重(数组元素是对象的情况)

js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致所有元素都相等,这时判断方法不再有意义.一般最后数组就只剩一个 2.如果是直接比较法,则因为对象在内存中是按引用访问的,属性值相同的对象也不会相等,简单的直接判断不再有意义.一般最后数组还是原样 所以就需要进行值的比较 当然了,也可以换着法来将相应对象转为字符串(不是默认的那种[object Obj