代码之家  ›  专栏  ›  技术社区  ›  streetparade

$myvar测试之类的PHP变量无效?

php
  •  1
  • streetparade  · 技术社区  · 15 年前

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

    7 回复  |  直到 10 年前
        1
  •  8
  •   Tower    15 年前

    不,这是无效的。原因是负号(-)。在PHP中,变量可以包含0-9a-z a-z_u,但不能以数字开头,并且允许使用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-z a-z_x7f-\xff][a-z a-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.
    ?>
    
        2
  •  3
  •   Ionuț G. Stan    10 年前

    有一些解决办法,但确实非常难看。最好使用下划线、camelcase或数组,其中可以使用任何字符串作为键名。

    这就是解决方法:

    ${'a-b'} = 'foo';
    
    var_dump(${'a-b'}); // string(3) "foo"
    
        3
  •  0
  •   Matteo Riva    15 年前

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

    从文档中:

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

    变量名遵循与PHP中其他标签相同的规则。有效的变量名以字母或下划线开头,后跟任意数量的字母、数字或下划线。作为一个正则表达式,它可以这样表示:'[a-z a-z'\x7f-\xff][a-z a-z0-9'\x7f-\xff]*

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

        4
  •  0
  •   Your Common Sense    15 年前

    减号用于减法
    您将得到与$myvar*test$myvar$test、$myvar;test$myvar(test等)等变量相同的结果。

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

    请注意,数组键名称可能包含几乎任何字符,甚至是国家语言。

        5
  •  0
  •   Marek Karbarz    15 年前

    PHP documentation

    变量名遵循与PHP中其他标签相同的规则。有效的变量名以字母或下划线开头,后跟任意数量的字母、数字或下划线。作为一个正则表达式,它可以这样表示:'[a-z a-z'\x7f-\xff][a-z a-z0-9'\x7f-\xff]*

    所以根据这些规则,您的变量名是无效的。

        6
  •  0
  •   deceze    15 年前

    不,不是。

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

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

        7
  •  0
  •   Dado    12 年前

    它是无效的,但如果您从JSON获得它,这里有一个解决方法:

    print_r($JSONObject);
    
    stdClass Object (
        [psr-0] => stdClass Object
            (
                [MyBundle] => 'MyPath' 
            )
    
    )
    

    …正在尝试访问 $jsonObject->psr-0; 不起作用-所以你可以 STD类 数组 :

    $JSONArray = (array)$JSONObject;
    print_r($JSONArray);
    
    Array
    (
        [psr-0] => stdClass Object
            (
                [MyBundle] => 'MyPath' 
            )
    
    ) 
    

    …现在您可以轻松访问 $jsonarray['psr-0'] !