Kenji
kenji****@club*****
2008年 8月 13日 (水) 11:31:35 JST
Kenji です。 On Wed, 13 Aug 2008 11:12:02 +0900 mocap****@pugpu***** wrote: > kunitsujiさん > > On Tue, 12 Aug 2008 12:17:42 +0900 > kunitsuji <tsuji****@m-s*****> wrote: > > > kunitsujiです。 > > > > もかぱぱさん。こんにちは。 > > お返事が遅れてすみません。 > > > 下記みましたが、あくまでもPHPのバージョンその他基本的に全く同じ状態で > > なおかつCIのソース、設定情報も同じということですよね? > > 唯一違うのが > > >A(社内): allow_call_time_pass_reference = Off > > >B(公開): allow_call_time_pass_reference = On > > ということでまちがいないですか? > > 他にも微妙に違っていたのですが、これが目につきました。 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に渡すデータを設定しているので、値渡しにしてしま > うとデータが返りません。実際に擬似変数に値が入らなくなります。 ということで、上記は、よくないコードですね。 > > PHPのバージョンは5ですよね? > > すみません、phpのバージョンを書き忘れていました。 > > A(社内): PHP 5.2.6 > B(公開): PHP 4.3.10-22 > > と大分違いました。 > ところで、調べていたら以下のことがわかりました。オリジナルの > > $this->load->library('framework'); > $this->load->library('parser'); > > この順を入れ替えたら動作しました。また、 > > $this->load->library('framework'); > $this->load->library('parser'); > : > $this->framework->parser->parse($view, $data); > > としたら動作しました。どうも > > $this->load->library('framework'); > > この処理の後の名前空間に問題があるようです。つまり、$thisはこのアプリケー > ションのクラスでなくてはならないのにframeworkを指しているようです。なの > で、ロード順を入れ替えてparserを先にロードすると本来の > > $this->parser->parse($view, $data); > > は動作するし、元の順のまま、 > > $CI = &get_instance(); > $CI->parser->parse($view, $data); > > は、$CIがframeworkになるため動作するようです。Frameworkクラスは > > class Framework extends Controller { > > と定義しているのですが、まずいでしょうか? 原因は、それですね。 Framework がコントローラですと、$this は CodeIgniterスーパーオブジェクトに なるかと思います。 ライブラリなら、Controllerクラスを継承してはいけないですね。 // Kenji