程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php重載數組操作符

php重載數組操作符

編輯:關於PHP編程

    在php中提供了許多接口用於實現一些很特定的功能,比如你想把一個對象當作array使用時,只需要實現ArrayAccess接口,當你想要foreach中能夠使用一個對象時,只需要實現Iterator接口,下面給一個例子出來

    class BtstoreRoot
    {
    
    	/**
    	 * 根結點
    	 * @var BtstoreElement
    	 */
    	static $root;
    }
    
    class BtstoreElement implements ArrayAccess, Iterator
    {
    
    	/**
    	 * 當前所代表的目錄
    	 * @var string
    	 */
    	private $dataDir;
    
    	/**
    	 * 當前所代表的數據
    	 * @var array
    	 */
    	private $arrData;
    
    	/**
    	 * 構造函數
    	 * @param string $dataDir
    	 * @param array $arrData
    	 */
    	function __construct($dataDir, $arrData)
    	{
    
    		$this->dataDir = '';
    		$this->arrData = array ();
    		if (! empty ( $dataDir ) && is_dir ( $dataDir ))
    		{
    			$this->dataDir = $dataDir;
    		}
    
    		if (! empty ( $arrData ))
    		{
    			$this->arrData = $arrData;
    		}
    	}
    
    	function __get($key)
    	{
    
    		if (isset ( $this->arrData [$key] ))
    		{
    			$data = $this->arrData [$key];
    			if (is_array ( $data ) && ! is_object ( $data ))
    			{
    				$data = new BtstoreElement ( '', $data );
    			}
    			return $data;
    		}
    
    		if (! empty ( $this->dataDir ))
    		{
    			$path = $this->dataDir . '/' . $key;
    			if (is_dir ( $path ))
    			{
    				$data = new BtstoreElement ( $path, null );
    				$this->arrData [$key] = $data;
    				return $data;
    			}
    
    			if (is_file ( $path ))
    			{
    				$content = file_get_contents ( $path );
    				$arrData = unserialize ( $content );
    				$data = new BtstoreElement ( '', $arrData );
    				$this->arrData [$key] = $data;
    				return $data;
    			}
    		}
    
    		trigger_error ( "undefined index:$key" );
    	}
    
    	function __isset($key)
    	{
    
    		if (isset ( $this->arrData [$key] ))
    		{
    			return true;
    		}
    
    		if (file_exists ( $this->dataDir . '/' . $key ))
    		{
    			return true;
    		}
    
    		return false;
    	}
    
    	function toArray()
    	{
    
    		return $this->arrData;
    	}
    
    	/* (non-PHPdoc)
    	 * @see ArrayAccess::offsetExists()
    	 */
    	public function offsetExists($offset)
    	{
    
    		return $this->__isset ( $offset );
    	}
    
    	/* (non-PHPdoc)
    	 * @see ArrayAccess::offsetGet()
    	 */
    	public function offsetGet($offset)
    	{
    
    		return $this->__get ( $offset );
    	}
    
    	/* (non-PHPdoc)
    	 * @see ArrayAccess::offsetSet()
    	 */
    	public function offsetSet($offset, $value)
    	{
    
    		trigger_error ( 'offsetSet not implemented by BtstoreElement' );
    	}
    
    	/* (non-PHPdoc)
    	 * @see ArrayAccess::offsetUnset()
    	 */
    	public function offsetUnset($offset)
    	{
    
    		trigger_error ( 'offsetUnset not implemented by BtstoreElement' );
    	}
    
    	/* (non-PHPdoc)
    	 * @see Iterator::current()
    	 */
    	public function current()
    	{
    
    		return current ( $this->arrData );
    	}
    
    	/* (non-PHPdoc)
    	 * @see Iterator::next()
    	 */
    	public function next()
    	{
    
    		return next ( $this->arrData );
    	}
    
    	/* (non-PHPdoc)
    	 * @see Iterator::key()
    	 */
    	public function key()
    	{
    
    		return key ( $this->arrData );
    	}
    
    	/* (non-PHPdoc)
    	 * @see Iterator::valid()
    	 */
    	public function valid()
    	{
    
    		$data = current ( $this->arrData );
    		return ! empty ( $data );
    	}
    
    	/* (non-PHPdoc)
    	 * @see Iterator::rewind()
    	 */
    	public function rewind()
    	{
    
    		reset ( $this->arrData );
    	}
    
    }
    
    /**
     * 獲取一個BtstoreElement對象
     * @return BtstoreElement
     */
    function btstore_get()
    {
    
    	if (empty ( BtstoreRoot::$root ))
    	{
    		BtstoreRoot::$root = new BtstoreElement ( ScriptConf::BTSTORE_ROOT, null );
    	}
    
    	return BtstoreRoot::$root;
    }
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved