像$ myvar-test这样的PHP变量无效?

时间:2010-04-22 12:51:04

标签: php

我需要创建一个类似$myvar-test;的var,但那是无效的?

7 个答案:

答案 0 :(得分:8)

不,它无效。原因是减号( - )。在PHP中,变量可以包含0-9a-zA-Z_,但不能以数字开头,并且允许使用Unicode字母。请参阅:http://www.php.net/manual/en/language.variables.basics.php

  

PHP中的变量用a表示   美元符号后跟名称   变量。变量名是   区分大小写的。

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 :(得分:4)

有一些解决方法,但它真的非常难看。最好使用下划线,或camelCase或数组,您可以使用任何字符串作为键名。

这将是解决方法:

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

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

答案 2 :(得分:0)

您不能在变量名中使用破折号。

来自文档:

  

PHP中的变量由美元符号后跟变量名称表示。变量名称区分大小写。

     

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。作为正则表达式,它将表达为:'[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

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

答案 3 :(得分:0)

用于减法的减号
你会得到与$ myvar * test $ myvar $ test,$ myvar等变量相同的结果; test $ myvar(test等等。

只是不要在变量名中使用特殊语法。

请注意,数组键名几乎可以包含任何字符,即使是国家语言

答案 4 :(得分:0)

来自PHP documentation

  

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。作为正则表达式,它将表达为:'[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

因此根据这些规则,您的变量名称无效。

答案 5 :(得分:0)

不,不是。

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

  

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。

答案 6 :(得分:0)

它无效 - 但如果你从JSON获得它 - 这是一个解决方法:

print_r($JSONObject);

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

)

...尝试访问 $ JSONObject-&gt; psr-0; 不起作用 - 因此您可以将 stdClass 强制转换为数组

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

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

) 

...现在您可以轻松访问 $ JSONArray ['psr-0']