我注意到在php中创建变量时确实发生了这种奇怪的现象。我能够创建一个String变量,而无需使用双引号。不过,这仅适用于单个字符串。如果这个问题很愚蠢,请问我是php的初学者。
<?php
$firstname = notreserved;
$lastname = Interstellar;
答案 0 :(得分:2)
请参见the documentation for Constants Syntax:
如果您使用未定义的常量,则PHP会假设您是指常量本身的名称,就像您将其称为字符串一样(CONSTANT与“ CONSTANT”)。发生这种情况时,将发出E_NOTICE级错误。另请参见有关$ foo [bar]为什么错误的手册(除非您首先将bar作为常量定义)。这不适用于(完全)限定常数,如果未定义,将引发致命错误。如果只想检查是否设置了常量,请使用define()函数。
答案 1 :(得分:1)
这里没有什么奇怪的。这是一个常见的陷阱,甚至是explained in the documentation。
该行:
$firstname = Case;
创建PHP variable $firstname
并尝试为其分配Case
constant的值。
如果已经创建了Case
常量(通过调用define()
或const
statement),则上述代码将其值复制到$firstname
变量中,就是这样。
但是,如果尚未声明Case
常量,则上面的代码会触发一个您可能看不到的通知(E_NOTICE
),因为默认情况下,PHP被配置为忽略通知。
PHP解释器是可以容忍的,并且假定您确实想写'Case'
并忘记了引号。然后,它使用字符串$firstname
初始化变量'Case'
,即使您忽略这些注意事项,这也可以帮助您确定错误的来源(尚未定义Case
常量)。 / p>
假设您要使用字符串初始化变量,则代码的正确语法为:
$firstname = 'Case';
$lastname = 'Interstellar';
详细了解PHP strings。
答案 2 :(得分:0)
您应该收到一条通知。
您在这里要做的是分配一个未定义的常量。这将隐式定义一个以名称为其值的常量。
答案 3 :(得分:0)
这是因为您已禁止所有警告,请检查this 3v4l.org result-每个php版本都会抱怨它,并且因为语法不正确而不允许其打印任何内容