$_GET和$_POST里面要不要加引号?$_GET[‘ABC’]
$_POST[‘ABC’]
$_GET["ABC"]
$_POST["ABC"]

$_GET[ABC]
$_POST[ABC]

是上面对,中间对,还是下面对?

解决方案 »

  1.   

    不加引号也可以:$_GET[AB]
    $_POST[AB]但是,在这种情况下,系统先是把 AB 当作常量的,即: $_GET[常量AB]和$_POST[常量AB],只有在上下文里找不到常量 AB 是,才把 AB 当作 $_GET和$_POST 的索引引用。所以,推荐:$_GET['AB']
    $_POST['AB']

    $_GET["AB"]
    $_POST["AB"]但从性能方面考虑,$_GET['AB'] 要优于 $_GET["AB"],$_POST['AB']要优于 $_POST["AB"],所以最佳方案还是:$_GET['AB']
    $_POST['AB']
      

  2.   

    $_GET[AB],其中键值AB是一个常量,如果error_reporting(E_ALL)将会有一个notice,如果常量未定义PHP则认为它是一个字符串,但是你不能保证他不在前面被定义,如果定义为别的值那么$_GET[AB]可能就不是你想要的东西了。PHP允许键值表示成变量、字符串、常量、函数等,如:
    $key = 'ab';
    define('AB', 'ab');
    function AB() {
        return 'ab';
    }
    $_GET[$key]; //相当于$_GET['ab'];同$_GET["ab"];
    $_GET[AB]; //相当于$_GET['ab'];同$_GET["ab"];
    $_GET[AB()]; //相当于$_GET['ab'];同$_GET["ab"];
    字符串使用单引号和双引号的区别只在于双引号中允许使用\n \r \t等转意字符,且可以包含变量,如
    $a = 'a';
    $key = "{$a}b"; //$key 值为 ab
      

  3.   

    没有这种说法,PHP没有明确表示单引号效率比双引号高,并且还可能双引号效率比单引号高。
      

  4.   

    要加!
    至少程序规范性是这样要求的不只是$_GET、$_POST,所有的关联数组的关联键都是这个要求纯字符串用单引号括起
    含有变量的字符串用双引号括起,以便php完成求值的动作6#的解答是正确的,而8#的补充是错误的
      

  5.   

    建议看看这篇文章,或者看看源代码,不要建立在老版本的PHP的基础上
    http://www.phpchina.com/html/27/n-34627.html
    针对PHP 5.2及5.3的基准测试显示,虽然双引号使用窜改(interpolation)而单引号使用连锁(concatenation),这两个的速度是完全一致的(甚至双引号常常会更快一些)。当使用没有包含变量的普通字符串时,使用双引号的性能要明显占优。