PHP中带有变量的怪异现象

时间:2018-07-18 14:30:12

标签: php

我注意到在php中创建变量时确实发生了这种奇怪的现象。我能够创建一个String变量,而无需使用双引号。不过,这仅适用于单个字符串。如果这个问题很愚蠢,请问我是php的初学者。

<?php
$firstname = notreserved;
$lastname = Interstellar;

4 个答案:

答案 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版本都会抱怨它,并且因为语法不正确而不允许其打印任何内容