0

__get()プライベート プロパティにアクセスするために、クラスでマジック メソッドを使用しようとしています。アクセスされない限り、プロパティには値が割り当てられず、その値は 0 からインデックス付けされた配列です。

class Foo {
    private $bar;

    public function __get($p) {
        if ($p == 'bar') {
            if ($this->bar) {
                return $this->bar;
            }
            else {
                return $this->bar = $this->get_bar();
            }
        }
    }

    private function get_bar() {
        return Array('a', 'b', 'c');    // data from db
    }
}

私の PHP コードでは、このクラスのオブジェクトをインスタンス化し、それを直接 Smarty (つまり$smarty->assign('obj', new Foo())) に渡しています。$barテンプレート ファイル内のプロパティからインデックス 0 の値にアクセスしたいと考えています。私はこれを試しました:

    {$obj->bar[0]}

しかし、これは私には何も返されません...これは、このマジックメソッドによって返されるデータによってサポートされていないものですか?

4

2 に答える 2

0

$smarty->assign()を使用してオブジェクトを割り当てることはできませんassign()。連想配列と名前と値のペアのみを受け入れます。代わりに使用assign_by_ref()して、オブジェクトをテンプレートに送信します。

PHP/Smarty の例

$foo = new Foo();
$smarty->assign_by_ref('obj', $foo);

テンプレート例・使い方

{$obj->bar[0]}
于 2013-06-25T20:50:11.400 に答える