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

Back to archive index

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*****>




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