5

なぜこれが起こっているのか、またはそれを適切に説明する方法はよくわかりませんが、誰かがこれに光を当てることができるかもしれません.

私は、レジストリ、コントローラー、およびモジュールを利用する CodeIgniter/Opencart フレームワークに基づいた CMS システムを持っています。以前に変数を次のようにレジストリに保存したシナリオに遭遇しました。

$this->application_page = 'current/page';

しかし、何らかの理由でアプリケーションで呼び出すと:

echo empty($this->application_page)?'yes':'no';
//Returns Yes

しかし..再割り当てすると:

echo empty($this->application_page)?'yes':'no';
//Returns Yes

$page = $this->application_page;
echo empty($page)?'yes':'no';
//Returns No

var_dump は次を返します。

var_dump($this->application_page);
string 'current/page' (length=12)

を使用するだけでこれを簡単に回避できますが、$pageなぜこれが起こっているのか知りたいですか?

アップデート:

そのため、関数をいじりましたが、_isset機能しませんでした。おそらく私のエラーであり、機能していない可能性があります..すべてがどのように連携するかを次に示します。

class Registry {
  private $data = array();
  public function get($key){ return (isset($this->data[$key]) ? $this->data[$key] : NULL); }
  public function set($key,$val){ $this->data[$key] = $val;
}

abstract class Controller {
  protected $registry;
  public function __construct($registry){ $this->registry = $registry; }
  public function __get($key){ return $this->registry->get($key); }
  public function __set($key,$value){ $this->registry->set($key, $value); }
}

class Applications {
  private $registry;
  function __construct($Registry){ $this->registry = $Registry; }
  function __get($key){ return $this->registry->get($key); }
  function __set($key,$val){ return $this->registry->set($key,$val); }
  public function buildApplication(){
      $this->application_page = 'current/page';
      $application = new application($this->registry);
  }

}

class Application extends Controller {
  public function index(){
    echo empty($this->application_page)?'yes':'no';
    //Returns Yes

    $page = $this->application_page;
    echo empty($page)?'yes':'no';
    //Returns No
  }
}

うまくいけば、これは役に立ちますか? タイプミスがありましたが、Registry の関数は魔法のメソッドではありません。また、アプリケーションで $registry が宣言されました。

4

1 に答える 1