mocapapa
mocap****@pugpu*****
2008年 8月 13日 (水) 13:09:48 JST
Kenjiさん、見ていただきありがとうございます。 // 順序を変えました。 On Wed, 13 Aug 2008 11:31:35 +0900 Kenji <kenji****@club*****> wrote: > Kenji です。 > > class Framework extends Controller { > > > > と定義しているのですが、まずいでしょうか? > > 原因は、それですね。 > > Framework がコントローラですと、$this は CodeIgniterスーパーオブジェクトに > なるかと思います。 > > ライブラリなら、Controllerクラスを継承してはいけないですね。 アプリをライブラリ化した際に一旦はextendsをやめたのですが、別のメソッド がundefinedか何かになったかで直すのが面倒でextends Controllerしてしまい ました。これをはずすように修正します。 > > 他にも微妙に違っていたのですが、これが目につきました。 > > http://www.php.net/manual/ja/ini.core.php#ini.allow-call-time-pass-reference > > |推奨される方法は、関数宣言時に参照渡しとするべき引数を指定する ことです。 > |将来のバージョンでの動作を保障するために、この オプションを off とし、 > |スクリプトがこの状態で正しく動作することを 確認することが推奨されます > |(この機能を使用する度に警告が発生します)。 > > これは、Off に設定すべき項目ですね。また、警告するだけのようですから、 > 動作には影響しないはずです。 はい、そのように認識しています。 > > > // 擬似変数の設定 > > > > $this->_set_pseudo_variables(&$data); > > > ここで引数が参照私になっていますよね? > > > これ普通に渡してみてどうですか?それでも > > > appli中の$this->parserはちがいがでますかね。 > > > > このメソッド中で、parserに渡すデータを設定しているので、値渡しにしてしま > > うとデータが返りません。実際に擬似変数に値が入らなくなります。 > > ということで、上記は、よくないコードですね。 ということは、 function(&variable) ではなく、 variable = function() のように受けとるほうが良いということですかね。具体的なコードは、現在、以 下のようになっています。 class Application extends Controller { var $version = '$Id$'; var $pseudo_variables = array ( : ); function index() { : $this->_set_pseudo_variables(&$data); : } : function _set_pseudo_variables($data) { $data = array_merge($data, $this->pseudo_variables); $data['base_url'] = base_url(); $data['version'] = $this->version; } -- モカぱぱ <mocap****@pugpu*****>