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

php中重載數組操作符

編輯:關於PHP編程

在php中提供了許多接口用於實現一些很特定的功能,比如你想把一個對象當作array使用時,只需要實現ArrayAccess接口,當你想要foreach中能夠使用一個對象時,只需要實現Iterator接口,下面給一個例子出來   [php]   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 (! emptyempty ( $dataDir ) && is_dir ( $dataDir ))           {               $this->dataDir = $dataDir;           }              if (! emptyempty ( $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 (! emptyempty ( $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 ! emptyempty ( $data );       }          /* (non-PHPdoc)       * @see Iterator::rewind()       */       public function rewind()       {              reset ( $this->arrData );       }      }      /**   * 獲取一個BtstoreElement對象   * @return BtstoreElement   */   function btstore_get()   {          if (emptyempty ( BtstoreRoot::$root ))       {           BtstoreRoot::$root = new BtstoreElement ( ScriptConf::BTSTORE_ROOT, null );       }          return BtstoreRoot::$root;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved