1

プロジェクトでphpactiverecord(http://www.phpactiverecord.org/)を使用しています。

私は以下の関係を明らかにしました。その場で変更できるように変数を渡す方法はありますlanguage_idか?

static $has_one = array(
  array(
    'language', 
    'class_name' => 'Pages_lang', 
    'conditions' => array('language_id=1')
  )
);

ドキュメントを調べたところ、次のことができるようです。

static $has_one = array(
  array('language', 
    'class_name' => 
    'Pages_lang', 
    'conditions' => array('language_id=?','1'))
);

しかし、変数を渡す:

static $has_one = array(
  array('language', 
    'class_name' => 
    'Pages_lang', 
    'conditions' => array('language_id=?',$language_id))
);

エラーをスローします。

どこが間違っているのかよくわかりません。

4

1 に答える 1

0

static変数は、オブジェクトのコンテキストでのみ意味があります。それらは、そのタイプのオブジェクトが実際に作成(インスタンス化)される前に存在します。

ここで何を達成しようとしているのか完全にはわかりませんが、プログラムの制御フローのある時点で変数を変更したいと思うでしょう。これを行うには、その静的変数の値を設定するクラス内のメソッドを作成して呼び出すか(推奨、以下のサンプルコードを参照)、メインコードから明示的に設定する必要があります(推奨されません。変数を次のように設定する必要があります)。public)_

class Foo
{
    static $has_one = 'initial value';

    public static function setHasOne($value) {
        self::$has_one=$value;
    }
}

// main code:
Foo::setHasOne('new value');

簡単にするために、ここでは文字列変数を使用しましたが、配列でも同じように機能します。

于 2013-03-26T23:59:58.873 に答える