2010-04-22 54 views
1

我需要創建一個類似於$myvar-test;的var,但那不是有效的或?

回答

8

不,它無效。原因是減號( - )。在PHP中,變量可以包含0-9a-zA-Z_,但不能以數字開頭,並且Unicode字母是允許的。請參閱:http://www.php.net/manual/en/language.variables.basics.php

變量是在PHP由 美元符號後面跟的 變量名來表示。變量名稱是 區分大小寫。

Variable names follow the same rules as other labels in PHP. A valid 

變量名以字母或下劃線 ,隨後任意數量的 字母,數字或下劃線。作爲 正則表達式,這將是這樣 表示: '[A-ZA-Z_ \ x7f- \ XFF] [A-ZA-Z0-9_ \ x7f- \ XFF] *'

而幾個例子:

<?php 
$var = 'Bob'; 
$Var = 'Joe'; 
echo "$var, $Var";  // outputs "Bob, Joe" 

$4site = 'not yet';  // invalid; starts with a number 
$_4site = 'not yet'; // valid; starts with an underscore 
$täyte = 'mansikka'; // valid; 'ä' is (Extended) ASCII 228. 
?> 
+1

根據您在文檔中的引用,不允許使用Unicode。實際上,鑑於PHP支持Unicode的良好記錄,它會讓我感到驚訝。 – Joey 2010-04-22 12:56:40

+2

老實說,我不確定給定的正則表達式在文檔中是否完全匹配(它是否與Unicode字母匹配?),但是如果我想要$華語= 5,我甚至可以使用中文字符;並以相同的方式定義函數名稱。 – Tower 2010-04-22 13:04:00

0

您不能在變量名稱中使用破折號。

從文檔:在PHP

變量用一個美元符號後面跟變量名來表示。變量名稱區分大小寫。

變量名稱遵循與PHP中其他標籤相同的規則。有效的變量名稱以字母或下劃線開頭,後跟任意數量的字母,數字或下劃線。爲正則表達式,這將被表述爲: '[A-ZA-Z_ \ x7f- \ XFF] [A-ZA-Z0-9_ \ x7f- \ XFF] *'

來源:http://www.php.net/manual/en/language.variables.basics.php

用於減法
0

減號,你最終會與像$ MYVAR變量相同的結果*測試$ $ myvar的測試,$ MYVAR;測試$ MYVAR(測試這種

只要不使用特殊變量名稱中的語法

請注意,數組鍵名可能包含幾乎任何字符ev en國家語言

0

PHP documentation

變量名遵循相同的規則,如PHP等標籤。有效的變量名稱以字母或下劃線開頭,後跟任意數量的字母,數字或下劃線。作爲一個正則表達式,它將被表述爲: '[A-ZA-Z_ \ x7f- \ XFF] [A-ZA-Z0-9_ \ x7f- \ XFF] *'

所以你的變量名根據這些規則無效。

3

有解決方法,但它確實很醜。更好地使用下劃線或駝峯數組或可以使用任何字符串作爲鍵名稱的數組。

這將是解決方法:

${'a-b'} = 'foo'; 

var_dump(${'a-b'}); // string(3) "foo" 
0

這不是有效的 - 但如果你得到它例如從JSON - 這裏是一個解決辦法:

print_r($JSONObject); 

stdClass Object (
    [psr-0] => stdClass Object 
     (
      [MyBundle] => 'MyPath' 
     ) 

) 

...試圖訪問$ JSONObject-> PSR-0;不工作 - 這樣你就可以施放stdClass的陣列

$JSONArray = (array)$JSONObject; 
print_r($JSONArray); 

Array 
(
    [psr-0] => stdClass Object 
     (
      [MyBundle] => 'MyPath' 
     ) 

) 

...現在你可以輕鬆的獲取$ JSONArray ['PSR-0]

相關問題