`

ArrayAccess 创建一个类数组对象

    博客分类:
  • PHP
阅读更多

PS:原创文章,如需转载,请注明出处,谢谢!     

本文地址:http://flyer0126.iteye.com/blog/1502576

 

/**
 * 单例模式实现类-->ArrayAccess(数组式访问)接口
 *
 * @author flyer0126
 * @since 2012/4/27
 */
class Single{

	private $name;
	private static $_Instance = null;
	
	private function __construct()
	{
	
	}
	
	static function load()
	{
		if(null == self::$_Instance)
		{
			self::$_Instance = new Single();
		}
		return self::$_Instance;
	}
	
	public function setName($name)
	{
		$this->name = $name;
	}
	
	public function getName()
	{
		return $this->name;
	}
}

$s = Single::load();
$s->setName("jack");
echo $s->getName(); //jack

// 调整一下(继承ArrayAccess && 实现4个方法)
class Single implements ArrayAccess
{

	private $name;
	private static $_Instance = null;
	
	private function __construct()
	{
		
	}
	
	static function load()
	{
		if(null == self::$_Instance)
		{
			self::$_Instance = new Single();
		}
		return self::$_Instance;
	}
	
	public function setName($name)
	{
		$this->name = $name;
	}
	
	public function getName()
	{
		return $this->name;
	}
	
	/**
       * 实现四个方法
       * offsetExists(),用于标识一个元素是否已定义
       * offsetGet(),用于返回一个元素的值
       * offsetSet(),用于为一个元素设置新值
       * offsetUnset(),用于删除一个元素和相应的值
      **/
	public function offsetSet($offset, $value) 
	{
		if (is_null($offset)) 
		{
			$this->container[] = $value;
		} 
		else 
		{
			$this->container[$offset] = $value;
		}
	}

	public function offsetGet($offset) 
	{
		return isset($this->container[$offset]) ? $this->container[$offset] : null;
	}

	public function offsetExists($offset) 
	{
		return isset($this->container[$offset]);
	}

	public function offsetUnset($offset) 
	{
		unset($this->container[$offset]);
	}
}

$s = Single::load();
$s->setName("jack");

$s["name"] = "mike";

echo $s->getName(); //jack
echo $s["name"]; //mike
print_r($s);
/**
Single Object
(
    [name:Single:private] => jack
    [container] => Array
        (
            [name] => mike
        )

)
**/

 

后述:
ArrayAccess(数组式访问)接口 提供像访问数组一样访问对象的能力的接口。
OO实现逻辑的封装,而当这种封装对我们已有的逻辑调用方式产生变更时,可以利用这种方式进行巧妙转变。

 

分享到:
评论

相关推荐

    PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象

    通过这种方式,我们可以创建一个对象来模拟数组操作,并且这个对象实际上是通过数据库操作来实现数据的读取、存储和删除的。 ArrayAccess 接口在很多框架和库中都有应用,比如用于实现 ORM(对象关系映射)功能。...

    PHP数组式访问接口ArrayAccess用法分析

    例如,当需要创建一个自定义的数据结构,但它需要能够以数组的方式被访问时,实现ArrayAccess接口就显得非常有用。 在提供的示例代码中,有一个名为ArrayAndObjectAccess的类,这个类实现了ArrayAccess接口。在这个...

    array-abstraction:实现 ArrayAccessIteratorCountable 接口的本机数组和对象的抽象

    数组抽象 实现 ArrayAccess/Iterator/Countable 接口的...如果需要,代理对象的概念允许您将自己的类数组对象与不同的类数组函数的优化实现连接起来。 通过创建代理对象,您可以在可能的情况下使用 PHP 优化的内置函

    java访问数组

    本实验要求编写一个Java程序,该程序允许用户向一个大小为10的数组输入整型值。程序需要实现的功能包括: 1. **用户输入数据到数组**:用户可以通过控制台或图形界面输入整数,并将其存储在数组中。 2. **按索引...

    PHP的SPL标准库的用法介绍.pdf

    例如,`ArrayAccess`接口允许一个对象像数组一样被访问,`Countable`接口提供了`count()`方法来获取对象元素的数量。 5. **异常处理(Exceptions)** - SPL提供了标准的异常处理类,如`Exception`和它的子类,如`...

    PHP如何使用array_unshift()在数组开头插入元素

    例如,通过实现`ArrayAccess`接口,我们可以创建一个对象,然后像操作普通数组那样对这个对象进行读写。 在处理大型数据集时,数组的操作性能也是一个需要考虑的因素。例如,如果频繁地使用`array_unshift()`,可能...

    property-access:PropertyAccess组件提供使用简单的字符串表示法对对象或数组进行读写的功能

    PropertyAccess组件是Symfony框架中的一个核心组件,专为PHP开发者设计,它提供了便捷的方式来访问和修改对象或数组的属性,即便这些属性可能存在嵌套结构中。这个组件的主要优点在于其简洁的API,允许通过字符串...

    PHP SPL标准库之SplFixedArray使用实例

    PHP SPL标准库中提供了多种迭代器、数据结构和对象接口的实现,其中SplFixedArray是一个固定大小的数组对象,它比标准的PHP数组拥有更好的性能表现。在处理大量数据时,尤其是固定大小的数组操作时,使用...

    PHP容器类的两种实现方式示例

    通过实现ArrayAccess接口,我们可以定义一个容器类,使其能够在用户代码中以数组的方式使用。实现ArrayAccess接口的容器类代码示例如下: ```php class ArrayContainer implements ArrayAccess { private $...

    gridview:从结果集创建表

    受 Yii 的 CGridView 的启发,这个类力求成为一种从数组生成表的简单方法,即; 一个数据库结果集。 它适用于数组数组或对象数组。 您决定要显示哪些数组列或对象属性。 它不会重写查询或处理分页,这取决于您。 ...

    php中创建和调用webservice接口示例

    4. 客户端调用:在客户端,使用`SoapClient`类创建一个实例,通过WSDL文件地址初始化,然后调用服务方法。 ```php $soap = new SoapClient('http://127.0.0.1/soap/Service.php?wsdl'); echo $soap->Add(1, 2); // ...

    PHP中预定义的6种接口介绍

    IteratorAggregate接口允许一个类以任意方式返回一个实现了Iterator或Traversable接口的对象,从而实现迭代访问。核心方法是`getIterator()`,它返回一个可用于遍历的迭代器实例。例如,`myData`类通过返回`Array...

    PHP 双链表(SplDoublyLinkedList)简介和使用实例

    例如,首先创建一个双链表实例,然后向其中添加元素,再通过不同方法进行遍历输出元素,或者使用序列化方法将双链表的状态保存到文件中。最后,还可以通过修改迭代模式,改变遍历双链表的顺序。 ...

    php5中文参考手册

    PHP5是其一个重要的版本,它在PHP4的基础上进行了许多改进和增强,提高了性能和功能。此中文参考手册是针对PHP5开发者的重要学习资源,涵盖了从基础语法到高级特性的全面内容,旨在帮助初学者和有经验的开发者更好地...

    Phly Mustache:一个PHP实现的Mustache模板语言类库.zip

    1. **模板继承**:Phly Mustache支持模板继承,允许创建一个基础模板,然后通过其他模板继承并覆盖特定部分来构建复杂的页面结构。这样可以确保代码重用和保持一致性。 2. **部分(Partials)**:部分是可重用的...

    PHP pthreads v3下的Volatile简介与使用方法示例

    在这个例子中,我们创建了一个Task类,它扩展了Thread类。初始状态下,我们尝试在构造函数中给$data成员赋值,并观察其行为。当我们将$data设置为数组时,pthreads v3会自动将其转换为Volatile对象,从而导致后续的...

Global site tag (gtag.js) - Google Analytics