我曾經遇到過需要訪問/修改變量這樣:
$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"
當然,這是一類環境中工作。你可以在當地的環境很容易地使用可變的變量是這樣的:
$a = "hello";
$b = "hi";
$val = "a";
echo $$val; // outputs "hello"
$val = "b";
echo $$val; // outputs "hi"
的所有$this->{$var}
和$this->var
是兩個完全不同的事情首先。後者將請求var
類變量,而另一個將請求包含在$var
字符串中的變量的名稱。如果$var
是字符串'foo'
那麼它將請求$this->foo
等。
這對於動態編程(只有在運行時才知道變量的名稱)很有用。
${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};
將打印Ok
即使變量名y - x
是因爲空間和-
字符無效:但是,尤其是當你有奇怪的變量名的經典{}
符號在字符串上下文中是非常強大的。
+1!我從來不知道變量名稱可能很複雜。那麼,你可以把一個數組/對象作爲變量名嗎? – 2013-05-07 01:21:23
@DaveChen,他們的字符串表示是。雖然我認爲變量名稱有一個長度限制。我認爲這不是一種好的做法,因此我會避免它。 – Shoe 2013-05-07 03:11:24
hmm'$ object-> attr' ='$ object - > {「attr」}':) – 2013-05-06 22:08:13
@DaveChen用這個例子更新了我的答案 – jszobody 2013-05-06 22:22:24
我記得我剛開始的時候, $ this - > $ val'並失敗了。很高興看到這個答案。 – 2013-05-06 22:24:14