[Codeigniter-users] 奇妙な点 (Re: CIの速度) (Re: 初めまして)

Back to archive index

mocap****@pugpu***** mocap****@pugpu*****
2008年 8月 13日 (水) 11:12:02 JST


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
> ということでまちがいないですか?

他にも微妙に違っていたのですが、これが目につきました。

> // 擬似変数の設定
> >    $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 {

と定義しているのですが、まずいでしょうか?

-- 
モカぱぱ <mocap****@pugpu*****>




Codeigniter-users メーリングリストの案内
Back to archive index