PHPでArrayObjectを適切に拡張しますか?

arrayobject arrays oop php spl
PHPでArrayObjectを適切に拡張しますか?

*問題:*以下に示すように、PHPの ArrayObject`を拡張しようとしています。 残念ながら、多次元オブジェクトを設定するときに適切に動作させることができず、代わりにPHPで厳密な設定を有効にしているためエラーがスローされます。 ( `エラー:厳格な標準:空の値からデフォルトのオブジェクトを作成する

*質問:*クラスを変更して、存在しないレベルを自動的に作成するにはどうすればよいですか?

コード:

$config = new Config;
$config->lvl1_0 = true; // Works
$config->lvl1_1->lvl2 = true; // Throws error as "lvl1" isn't set already

class Config extends ArrayObject
{
    function __construct() {
        parent::__construct(array(), self::ARRAY_AS_PROPS);
    }

    public function offsetSet($k, $v) {
        $v = is_array($v) ? new self($v) : $v;
        return parent::offsetSet($k, $v);
    }
}

  7  4


ベストアンサー

あなたの問題をより簡単に見ると、多次元オブジェクトの概念をモデル化するクラスを作成できます。

投稿するソリューションは、言及した目標を達成するために `ArrayObject`から拡張されるものではありません。 質問にoopのタグを付けたので、オブジェクトの状態を保存する方法と、アクセス方法との分離を強化することが重要だと思います。

これがあなたが必要なものを実現するのに役立つことを願っています!

あなたが言ったことから、多次元オブジェクトは次のようなものです:

  • ネストされた情報の複数のレベルを処理します

  • これにより、情報への読み取り/書き込みアクセスが提供されます。
    プロパティ

  • 未定義のプロパティにアクセスしたときにうまく動作します。 これの意味は
    たとえば、空のインスタンスで次を実行します: $ config→ database→ host = 'localhost'` database`と host`レベルは自動的に初期化され、 host`は ’ localhostを返します’`クエリされたとき。

  • 理想的には、連想配列から初期化されます(なぜなら
    すでに設定ファイルを解析できます)

提案された解決策

それでは、これらの機能をどのように実装できますか?

2番目の方法は簡単です。PHPの get`および

13


タイトルとURLをコピーしました