PHP では、ArrayAccess インターフェイスを使用して、配列の 1 つへの同様のアクセスを提供するクラスを開発します。プロパティ、配列アクセス。このような配列プロパティは、オブジェクトの作成中に公開せずに操作できます。 ArrayAccessインターフェイスは次の抽象メソッドを定義します
ArrayAccess { /* Methods */ abstract public offsetExists ( mixed $offset ) : bool abstract public offsetGet ( mixed $offset ) : mixed abstract public offsetSet ( mixed $offset , mixed $value ) : void abstract public offsetUnset ( mixed $offset ) : void }
ArrayAccess::offsetExists - オフセットが存在するかどうか
ArrayAccess::offsetGet - 取得するオフセット
ArrayAccess::offsetSet - 指定されたオフセットに値を割り当てます
ArrayAccess::offsetUnset - オフセットの設定を解除します。
ArrayAccess::offsetUnset - オフセットの設定を解除します。 p>
次の例では、連想配列は myclass の内部プライベート プロパティです。キーはオフセットとして機能します。配列内の項目を設定、取得、および設定解除できます。オフセットが指定されていない場合は、整数として扱われ、毎回次のインデックスにインクリメントされます。
リアルタイム デモンストレーション
<?php class myclass implements ArrayAccess { private $arr = array(); public function __construct() { $this->arr = array( "Mumbai" => "Maharashtra", "Hyderabad" => "A.P.", "Patna" => "Bihar", ); } public function offsetSet($offset, $value) { if (is_null($offset)) { $this->arr[] = $value; } else { $this->arr[$offset] = $value; } } public function offsetExists($offset) { return isset($this->arr[$offset]); } public function offsetUnset($offset) { unset($this->arr[$offset]); } public function offsetGet($offset) { return isset($this->arr[$offset]) ? $this->arr[$offset] : null; } } $obj = new myclass(); var_dump(isset($obj["Mumbai"])); var_dump($obj["Mumbai"]); unset($obj["Mumbai"]); var_dump(isset($obj["Mumbai"])); $obj["Bombay"] = "Maharashtra"; var_dump($obj["Bombay"]); $obj["Chennai"] = 'Tamilnadu'; $obj[] = 'New State'; $obj["Hyderabad"] = 'Telangana'; print_r($obj); ?>
上記のプログラムは次の出力を表示します
bool(true) string(11) "Maharashtra" bool(false) string(11) "Maharashtra" myclass Object( [arr:myclass:private] => Array( [Hyderabad] => Telangana [Patna] => Bihar [Bombay] => Maharashtra [Chennai] => Tamilnadu [0] => New State ) )
class はインデックス付き配列にすることもできます。この場合、要素のインデックス (0 から始まる) がオフセットとして機能します。 offsetSet(0 メソッドが offset パラメーターなしで呼び出される場合、配列インデックスは次に使用可能な整数に増分されます。
<?php class myclass implements ArrayAccess { private $arr = array(); public function __construct() { $this->arr = array("Mumbai", "Hyderabad", "Patna"); } public function offsetSet($offset, $value) { if (is_null($offset)) { $this->arr[] = $value; } else { $this->arr[$offset] = $value; } } public function offsetExists($offset) { eturn isset($this->arr[$offset]); } public function offsetUnset($offset) { unset($this->arr[$offset]); } public function offsetGet($offset) { return isset($this->arr[$offset]) ? $this->arr[$offset] : null; } } $obj = new myclass(); var_dump(isset($obj[0])); var_dump($obj[0]); unset($obj[0]); var_dump(isset($obj[0])); $obj[3] = "Pune"; var_dump($obj[3]); $obj[4] = 'Chennai'; $obj[] = 'NewDelhi'; $obj[2] = 'Benguluru'; print_r($obj); ?>
上記のプログラムは次のように表示します。出力
bool(true) string(6) "Mumbai" bool(false) string(4) "Pune" myclass Object( [arr:myclass:private] => Array( [1] => Hyderabad [2] => Benguluru [3] => Pune [4] => Chennai [5] => NewDelhi ) )
以上がPHP ArrayAccess インターフェイスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。