PHP5 には一連の新しいインターフェイスがあります。 HaoHappy が翻訳したこの一連の記事で、そのアプリケーションについて学ぶことができます。同時に、これらのインターフェイスと実装された一部のクラスは、標準 PHP ライブラリ (SPL) に分類されます。クラスのオーバーロードをさらに強化するために、多くの機能が PHP5 に追加されました。 ArrayAccess の目的は、クラスを配列 (PHP の配列) のように見せることです。これは、C# のインデックス機能と非常によく似ています。
ArrayAccess の定義は次のとおりです:
インターフェース ArrayAccess
ブール値の offsetExists($index)
混合オフセットGet($index)
void offsetSet($index, $newvalue)
void offsetUnset($index)
PHP 配列の能力により、多くの人は PHP アプリケーションを作成するときに構成情報を配列に保存することがよくあります。したがって、コード内のあらゆる場所にグローバルが存在する可能性があります。別の方法を試してみましょう?
次のコードのような:
//設定クラス
クラス構成は ArrayAccess を実装します
{
静的プライベート $config;
プライベート $configarray;
プライベート関数 __construct()
{
// 初期化
$this->configarray = array("ビンジー"=>"男性", "ジャスミン"=>"女性");
}
パブリック静的関数instance()
{
//
if (self::$config == null)
{
self::$config = 新しい構成();
}
self::$config を返す;
}
関数 offsetExists($index)
{
return isset($this->configarray[$index]);
}
関数 offsetGet($index) {
return $this->configarray[$index];
}
関数 offsetSet($index, $newvalue) {
$this->configarray[$index] = $newvalue;
}
関数 offsetUnset($index) {
unset($this->configarray[$index]);
}
}
$config = 構成::インスタンス();
print $config["Binzy"];
ご想像のとおり、プログラムの出力は「男性」です。
次のアクションを実行すると:
$config = 構成::インスタンス();
print $config["Binzy"];
$config['ジャスミン'] = "ビンジーの恋人";
//設定2
$config2 = 構成::インスタンス();
print $config2['ジャスミン'];
はい、予想どおり、出力は Binzy's Lover になります。
これと配列を使用することの違いは何ですか?と疑問に思われるかもしれません。目的に違いはありませんが、最大の違いはカプセル化です。 OO の最も基本的なジョブはカプセル化であり、カプセル化により変更を内部に効果的に保持できます。つまり、構成情報が PHP 配列に格納されなくなった場合、アプリケーション コードを変更する必要はありません。実行できることは、構成スキームに新しい戦略 (Strategy) を追加することだけです。 :
ArrayAccess はさらに改良されており、カウントする方法がなくなったため、ほとんどの場合、使用には影響しません。
参考:
1.《PHP5パワープログラミング》
2.「デザインパターン」
3.「オブジェクト指向の分析と設計」