ArrayAccess
PHPでの実装の実装についていくつか質問があります。
サンプルコードは次のとおりです。
class obj implements arrayaccess {
private $container = array();
public function __construct() {
$this->container = array(
"one" => 1,
"two" => 2,
"three" => 3,
);
}
public function offsetSet($offset, $value) {
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
}
質問:
ArrayAccess
PHP エンジンが実装された継承された関数を自動的に認識して呼び出すのは特別なインターフェイスであると想定しているため、実装する必要がある理由を尋ねていませんか?- 実装された関数を public と宣言するのはなぜですか? 自動的に呼び出される特別な関数だと思います。
$obj["two"]
関数は外部から呼び出されないと言って呼び出すので、それらはプライベートである必要はありません。 __constructor
塗りつぶされた配列を関数に割り当てる特別な理由はありますか? これは私が知っているコンストラクター関数ですが、この場合、どのような助けになるのでしょうか。ArrayAccess
とはどう違いArrayObject
ますか?ArrayAccess
を継承して実装したクラスは反復をサポートしていないと思いますか?- を実装せずにオブジェクトのインデックス作成を実装するにはどうすればよい
ArrayAccess
でしょうか?
ありがとう...