ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルでの配列演算子のオーバーロード

php_PHP チュートリアルでの配列演算子のオーバーロード

WBOY
WBOYオリジナル
2016-07-14 10:08:10787ブラウズ

PHP には、いくつかの非常に特殊な関数を実装するためのインターフェイスが多数用意されています。たとえば、オブジェクトを配列として使用する場合は、ArrayAccess インターフェイスを実装するだけで済みます。また、foreach でオブジェクトを使用する場合は、Iterator を実装するだけで済みます。インターフェイス、これが例です。

[php]
クラス BtstoreRoot
{
/**
* ルートノード
* @var BtstoreElement
*/
静的 $root
}
クラス BtstoreElement は ArrayAccess、Iterator を実装します
{
/**
* 現在表されているディレクトリ
* @var 文字列
*/
プライベート $dataDir
/**
* 現在表されているデータ
* @var 配列
*/
プライベート $arrData
/**
* コンストラクター
* @param string $dataDir
* @param 配列 $arrData
*/
関数 __construct($dataDir, $arrData)
{
$this->dataDir = '';
$this->arrData = 配列 ();
if (! emptyempty ( $dataDir ) && is_dir ( $dataDir ))
$this->dataDir = $dataDir;
}
if (! emptyempty ( $arrData ))
$this->arrData = $arrData;
}
}
関数__get($key)
{
if (isset ( $this->arrData [$key] ))
$data = $this->arrData [$key];
if (is_array ( $data ) && ! is_object ( $data ))
$data = new BtstoreElement ( '', $data );
}
$data を返します。
}
if (! emptyempty ( $this->dataDir ))
$path = $this->dataDir .
if (is_dir ( $path ))
$data = new BtstoreElement ($path, null);
$this->arrData [$key] = $data;
$data を返します。
}
if (is_file ( $path ))
$content = file_get_contents ($path);
$arrData = unserialize ( $content );
$data = new BtstoreElement ( '', $arrData );
$this->arrData [$key] = $data;
$data を返します。
}
}
trigger_error ( "未定義のインデックス:$key" );  
}
関数 __isset($key)
{
if (isset ( $this->arrData [$key] ))
{
true を返します。  
}
if (file_exists ( $this->dataDir . '/' . $key ))
{
true を返します。  
}
false を返します。  
}
関数 toArray()
{
$this->arrData; を返す  
}
/* (PHPdoc 以外)
* @see ArrayAccess::offsetExists()
*/
パブリック関数 offsetExists($offset)
{
return $this->__isset ( $offset );  
}
/* (PHPdoc 以外)
* @ArrayAccess::offsetGet() を参照
*/
パブリック関数 offsetGet($offset)
{
return $this->__get ( $offset );  
}
/* (PHPdoc 以外)
* @ArrayAccess::offsetSet() を参照
*/
パブリック関数 offsetSet($offset, $value)
{
trigger_error ( 'offsetSet は BtstoreElement によって実装されていません' );  
}
/* (PHPdoc 以外)
* @ArrayAccess::offsetUnset() を参照してください
*/
パブリック関数 offsetUnset($offset)
{
trigger_error ( 'offsetUnset は BtstoreElement によって実装されていません' );  
}
/* (PHPdoc 以外)
* @see Iterator::current()
*/
パブリック関数 current()
{
現在の値を返す ( $this->arrData );  
}
/* (PHPdoc 以外)
* @see Iterator::next()
*/
パブリック関数 next()
{
return next ( $this->arrData );  
}
/* (PHPdoc 以外)
* @see Iterator::key()
*/
パブリックファンクションキー()
{
return キー ( $this->arrData );  
}
/* (PHPdoc 以外)
* @see Iterator::valid()
*/
パブリック関数 valid()
{
$data = 現在 ( $this->arrData );  
戻ります!空の空 ( $data );  
}
/* (PHPdoc 以外)
* @see Iterator::rewind()
*/
パブリック関数 rewind()
{
リセット ( $this->arrData );
}
}
/**
* BtstoreElement オブジェクトを取得します
* @return BtstoreElement
*/
関数 btstore_get()
{
if (emptyempty ( BtstoreRoot::$root ))
{
BtstoreRoot::$root = 新しい BtstoreElement (ScriptConf::BTSTORE_ROOT、null);
}
BtstoreRoot::$root を返す
}

http://www.bkjia.com/PHPjc/477821.html

tru​​ehttp://www.bkjia.com/PHPjc/477821.html技術記事 PHP には、非常に特殊な関数を実装するためのインターフェイスが多数用意されています。たとえば、オブジェクトを配列として使用したい場合は、ArrayAccess インターフェイスを実装するだけで済みます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。