2011-05-29 10 views
0

私はプロジェクトに取り組んでおり、View::importというメソッドがあります。これは2つの引数を受け取りますstring name, reference mixed value私はこれをよく理解するために書きましたが、PHP!です)。メソッドと参照オーバーフロー

現在、このメソッドを呼び出すために、私は実行する必要があります。

$test = 1; 
    View::import('test', $test); 

は非常に細かい動作しますが、私はあまりにもを呼びたい:

View::import('test', 1); 

静的な場合のために、私ドンということオリジナルの可変コンテンツを置き換える必要はなく、「オンザフライで保存する」だけです。

フル方法は次のとおりです。

private static $globals; 
    public static function import($key, &$value){ 
     self::$globals->{$key} = &$value; 
    } 

私が変更した場合:

public static function import($key, $value){ // no-reference 

私はいくつかのケースで、元の値を変更することはできません。そして私はimport_staticまたはそれに類するもののような新しい方法を作りません。

存在するかどうかオーバーフローこの方法はありますか? (私はPHPがこれを完全にサポートしていないことを知っています)。

最も近いコードは次のとおりです。

View::import('test', $temporaryTest = 1); 

しかし、私はそれは大きなworkarround、ではないと思いますか?

+0

これはできません。または参照や値、何か1. '$ temporaryTest = 1'は参照ではなく、この代入(1)の結果を渡します。 –

+0

確かに、自身の '$ temporaryTest'(それは' 1'と同じです)を渡します。それが私の現在の働きです。 (PHP 5.3、少なくとも動作します) –

答えて

2

コードのデザインを変更することにより、 'オーバーフロー'とすることができます。例えば、このような何か:

public static function import($key, $value){ 
    self::$globals->{$key} = $value; 
    // do something with $value 
    return $value; 
} 

をして、あなたが書くことができるようになります:

$test = 1; 
$test = View::import('test', $test); 

など:以下、いくつかの代替ソリューションです

View::import('test', 1); 

を、実際には新しい、しかし意味のある方法を作成する必要があります。

// Your old method 
public static function import($key, $value){ 
    self::$globals->{$key} = $value; 
} 
// Your new method 
public static function bind($key, &$value){ 
    self::$globals->{$key} = &$value; 
} 

上記を適用すると、特定のメソッドを呼び出すときに実際に何が起こるかを簡単に確認できます。

あなたの役に立ったか

+0

1.ええ、私は本当に引用符が不足しています(私はあなたの答えを編集しました)。 2.問題は、この値が '$ globals'にアクセスする他の方法(将来は別の問題があります)によって将来的に変更できることです。 3.うん! 'bind'という名前は私のためによく聞こえます。私はこれで、今、このケースでは作業します:)ありがとう –

+0

@David問題はありません、あなたは大歓迎です。 – Tadeck