[PHP-users 35557] Re: 初期化した配列のキーについて質問させてください

whiteleaf 2nd.leaf @ gmail.com
2011年 4月 23日 (土) 12:57:15 JST


> $hooksが空だと思ったのは、コンストラクタ内でself::$_hooks = array();とし
> ていて、それを関数内で$hooks = self::$_hooksとしていたので、結局$hooks =
> array();
> だと思いまして。
〜 略 〜
> $_hooksを最初にprivate static
> $_hooksで定義し、その後でコンストラクタ内でHook_Registry
> の$_hooksを初期化していると思ったのですが、違うのでしょうか?

Hook_Registry のコンストラクタ内で $_hooks を空にしているのは確かですが、
★Aの時にコンストラクタが必ず呼ばれるわけではありません。
getInstance の実装をよく見てください。すでにインスタンスが作成されているときは、
作成済みのインスタンスを返しているだけです。これは singleton パターンです。
つまり★A以外の場所で getInstance が呼ばれた場合、その場所以外では Hook_Registry の
コンストラクタは呼ばれません。

Hook_Registry には regsiter というメソッドが定義されているようです。
★Aが実行される前に、どこかで register が呼ばれて $_hooks に値がセットされているのでは?
★Bはその register でセットした値をがあるかないかを判断しているわけです。


PHP-users メーリングリストの案内