2012-08-23 44 views
8

而不是使用PHP動態域名

$object->my_property 

我想要做這樣的事情

$object->"my_".$variable 
+0

要記住的一件事是,雖然你可以使用動態變量,但通常最好是明確的。它使得重構更容易。想象一下,搜索名爲「my_cat」的屬性,如果它是動態聲明的,則不會發現該屬性。 – Revent

回答

23

使用大括號就像這樣:

$object->{'my_' . $variable} 
6

如何:

$object->{"my_$variable"}; 

我認爲this section的PHP文檔可能會有所幫助。總之,可以在大括號內編寫任意表達式;其結果(一個字符串)成爲要處理的財產的名稱。例如:

$x = new StdClass(); 
$x->s1 = 'def'; 

echo $x->{'s' . print("abc\n")}; 
// prints 
// abc 
// def 

...然而通常是更加可讀此表達式的結果存儲到一個臨時變量(其,順便說一句,可以給出一個有意義的名稱)。就像這樣:

$x = new StdClass(); 
$x->s1 = 'def'; 

$someWeirdPropertyName = 's' . print("abc\n"); // becomes 's1'. 
echo $x->$someWeirdPropertyName; 

正如你看到的,這種方法使得大括號沒有必要,給讀者至少一些什麼組成的屬性名稱描述。 )

P.S. print僅用於說明變量名稱表達的潛在複雜性;雖然這種代碼通常用於認證測試,但在生產中使用這種東西是一個很大的「禁忌」。 )

+0

謝謝,如果我能給兩個蜱,你也會有一個蜱。 – user1209203