我应该使用“”(引用)在定义变量时?但有/无工作

时间:2011-07-14 15:34:13

标签: php

我刚开始学习PHP,这是我的第一个疑问......

这两项工作都是:

<?php
$function1 = "Aahan";
print "Hi, $function1";
?>

<?php
$function2 = Aahan;
print "Hi, $function2";
?>

看到区别?在第二个例子中,我没有使用变量字符串的“”(引号)。但它仍然有效。

另外,这本书的愚蠢作者(我不会说出名字)在某些例子中使用“”而在某些情况下并没有使用它们,没有解释。那么,我该怎么想?无论哪种方式都没问题,或者你建议什么?

编辑:对不起伙计们,作者是个好人。我误解了这个字符串$x = 3;,并开始查看上面的例子。刚刚意识到常量不需要引号。对不起。

EDIT-2:它没有向我显示任何错误,就像你们都提到的一样。如何让它显示错误?或者我的服务器本身有问题吗? (我不这么认为)

6 个答案:

答案 0 :(得分:10)

使用第一个!!

在PHP中,没有引号的字符串构成constant。如果没有找到现有常量,则生成的值是名称本身,这就是第二个“有效”的原因。

第二个产生一个难看的E_NOTICE:

  

注意:使用未定义的常量Aahan - 在第2行的/test.php中假定为'Aahan'

答案 1 :(得分:4)

第二个实际应该是发出警告,“未定义的常数Aahan ASSUMING'Aahan'”。总是引用以避免这种情况。

另外,请确保在开发时将错误报告设置为max。

答案 2 :(得分:4)

没有引号不正确,如果您已启用通知:

注意:使用未定义的常量Aahan - 在xx行的test.php中假定为'Aahan'

它告诉你的是,虽然代码无效,但PHP足够聪明,可以假设您的代码可以执行而不会终止。你应该避免这种事情,因为PHP假设'Aahan'的价值可能不正确。在这种情况下,假设它是一个常数,它的值是'Aahan'。

要做到这一点就是这样:

define("Aahan","Aahan");
echo Aahan;

结果

Aahan

并且没有错误 - 尽管常见的做法是在块大写中使用其名称定义常量。它不是必需的,但它使事情更容易阅读。

如果要在变量中定义字符串,请使用引号。如果您要定义一个数字,请不要。

有效代码:

$myVariable = "Hello World"; //this is a string
$myVariable = 3.42; //this would set $myVariable to a numeric value.
$myVariable = HELLO_WORLD; //this would set $myVariable to the value of constant HELLO_WORLD

在第三种情况下,如果您没有定义HELLO_WORLD - 您会收到通知,并且它会将该值视为“HELLO_WORLD” - 就像您键入的一样:

$myVariable = "HELLO_WORLD";

哪个没有错误。当然,您可能想要定义常量的原因有很多。

答案 3 :(得分:3)

如果Aahan恒定未定义,则将其视为“Aahah”并向您发送警告。

你应该使用“”

答案 4 :(得分:3)

Aahan,

$function1 = "Aahan";

是php的正确方法。它是一连串的追逐者。请参阅php strings

现在你做的时候

$function2 = Aahan;

Php搜索一个常量Aahan,当它未定义时,它将其视为一个字符串。进一步解释。考虑这些:

$function1 = "Aahan Is My Name";

$function2 = Aahan Is My Name;

第一个带“”(引号)的是正确的。第二个给你一个语法错误。

这是警告,除非您已将其关闭

  

注意:使用未定义的常量Aahan - 假设'Aahan'

编辑:启用全面Error reporting将以下代码添加到代码的第一行。

error_reporting(E_ALL);

答案 5 :(得分:2)

如果需要字符串,请使用引号:

$string = "this is a string";
$numeric_string = "1"; //actually a string, but will act like an integer
$integer = 1; //an integer
$value_of_a_constant = foo; // If no constant named "foo" exists, 
                            // PHP assumes you meant a string containing "foo", 
                            // but emits a notice, see below

我建议您打开error_reporting(设置为E_ALL或E_STRICT),然后打开display_errors。在脚本的最顶层执行此操作:

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

如果你有这样的设置,你会注意到你$var = Aahan时,PHP会输出一条错误信息(从技术上讲,这是一个“通知”),告诉你你使用了一个未定义的常量,并且它把它当成一根绳子。

在学习的同时开启E_ALL将帮助您更好,更快地学习。