/などの変数を変更します。
$this->{$var}
コンテキストは、CI DataMapperの取得ルールです。私はこのシンタックスが実際に何をしているのかはわからない。この文脈で{は何をしていますか?どうしてですか:
$this->var
ありがとう!
/などの変数を変更します。
$this->{$var}
コンテキストは、CI DataMapperの取得ルールです。私はこのシンタックスが実際に何をしているのかはわからない。この文脈で{は何をしていますか?どうしてですか:
$this->var
ありがとう!
これは可変変数です。これは$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"
を例作業:すべての$this->{$var}
と$this->var
のhttp://3v4l.org/n16sk
まず、2つの非常に異なるものです。後者はクラス変数var
を要求し、他方は$var
の文字列に含まれる変数の名前を要求します。 $var
が文字列'foo'
の場合、$this->foo
などと要求します。
これは、動的プログラミング(実行時にのみ変数の名前がわかっている場合)に役立ちます。しかし、文字列コンテキストで古典{}
表記はあなたが変な変数名を持っている場合は特に非常に強力です:
${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};
変数名y - x
があるため、スペースと-
文字で有効でない場合でもOk
を印刷します。
+1しました。私は変数名がその複雑なものであることは知らなかった。だから、配列/オブジェクトを変数名として置くことができますか? –
@DaveChen、その文字列表現はyesです。私は変数名には長さ制限があると思いますが。私はそれが良い習慣とは考えられないと思うので、私はそれを避けるだろう。 – Shoe
hmm '$ object-> attr' =' $ object - > {"attr"} ':) –
@DaveChenはこの例でも私の答えを更新しました – jszobody
私が始めたときに私は' $ this-> $ val'となり、悲惨に失敗しました。この返事を見るにはニース。 –