25

そのような変数にアクセス/変更する必要性に遭遇しました:

$this->{$var}

コンテキストは、CI データマッパーの get ルールにあります。この構文が実際に何をするのかわかりません。{はこのコンテキストで何をしますか?

なぜ使用できないのですか:

$this->var
4

2 に答える 2

45

これは可変変数であり、最終的には になり$this->{value-of-$val}ます。

参照: http://php.net/manual/en/language.variables.variable.php

たとえば、次のようになります。

$this->a = "hello";
$this->b = "hi";
$this->val = "howdy";

$val = "a";
echo $this->{$val}; // outputs "hello"

$val = "b";
echo $this->{$val}; // outputs "hi"

echo $this->val; // outputs "howdy"

echo $this->{"val"}; // also outputs "howdy"

作業例: http://3v4l.org/QNds9

もちろん、これはクラスのコンテキスト内で機能します。次のように、変数変数をローカル コンテキストで簡単に使用できます。

$a = "hello";
$b = "hi";

$val = "a";
echo $$val; // outputs "hello"

$val = "b";
echo $$val; // outputs "hi"

作業例: http://3v4l.org/n16sk

于 2013-05-06T22:06:03.383 に答える
10

まず、$this->{$var}$this->varは 2 つの非常に異なるものです。後者はvarクラス変数を要求し、もう一方は の文字列に含まれる変数の名前を要求します$var$varが文字列の場合、'foo'リクエスト$this->fooなどを行います。

これは、動的プログラミング(変数の名前が実行時にしか分からない場合) に役立ちます。しかし、{}文字列コンテキストでの従来の表記法は、特に変な変数名がある場合に非常に強力です。

${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};  

Okスペースと文字のために変数名y - xが有効でない場合でも出力され-ます。

于 2013-05-06T22:42:52.160 に答える