0

index.php に serviceFactory のインスタンスを作成しました。これは、(プライベート) 変数自体を取得/保存するだけです。しかし、何らかの理由で __get および __set マジック メソッドが機能しません。インデックスで var_dump($serviceFactory->language) を実行すると、false が返されます。serviceFactory のインスタンスを作成するときに、$router インスタンスを $serviceFactory コンストラクターに渡します。ルーターは機能しています (そうしないと、コントローラーやビューが表示されません) が、何らかの理由で $serviceFactory インスタンスから言語を取得しようとすると、false が返され、その理由がわかりません。

index.php

//create an instance of serviceFactory
$serviceFactory = new serviceFactory($router);
var_dump($serviceFactory->language);

サービスファクトリー

class serviceFactory {
    private $data = array();
    public function __construct($router) { //store the router data
        $data['language'] = $router->getKey('language');
        $data['class'] = $router->getKey('className');
        $data['method'] = $router->getKey('method');
        $data['arg'] = $router->getKey('arg');
    }
    public function __set($key, $val) {
        $this->data[$key] = $val;
    }
    public function __get($key) {
        if(isset($this->data[$key])) {
            return $this->data[$key];
        }
        else {
            return false;
        }
    }
}
4

1 に答える 1

0

簡単です。インスタンスの操作でよくある間違いを犯しました。

    $data['language'] = $router->getKey('language');
    $data['class'] = $router->getKey('className');
    $data['method'] = $router->getKey('method');
    $data['arg'] = $router->getKey('arg');

すべてあるはずです

    $this->data['language'] = $router->getKey('language');
    $this->data['class'] = $router->getKey('className');
    $this->data['method'] = $router->getKey('method');
    $this->data['arg'] = $router->getKey('arg');
于 2013-08-22T09:13:34.633 に答える