我只花了3个小时想知道为什么我不能开始一个会话,然后意识到我用过:
session_start;
当我应该使用时:
session_start();
我没有收到任何错误消息!
也许那时,我想,这是一种将函数与变量区分开来的懒惰方式 - 但后来记得它不能像变量那样需要$
有人可以告诉我为什么需要括号,以及为什么不使用它们时会出现错误?
答案 0 :(得分:9)
我收到通知(已将error_reporting设置为E_ALL
):
注意:使用未定义的常量session_start - 在第5行的/t.php中假定为'session_start'
一个函数总是需要括号(如你所见),你无法分辨函数和常量之间的区别。因为代码应该被写入,所以人们可以理解它,不允许读者看它是一个常量还是函数调用使得它更难以阅读和调试。
我认为这是一个通知而不是错误错误,因为向后兼容性,因为一些旧的代码倾向于使用不带引号的字符串访问数组,如果没有具有该名称的常量,PHP会将其视为带引号的字符串。
$myArray[myString] = 25;
答案 1 :(得分:2)
如果函数没有parantheses,你就无法在函数和常量之间产生差异...但奇怪的是它不会抛出错误...你在php.ini文件中关闭了错误吗? ?
答案 2 :(得分:1)
括号是必需的,因为PHP的语言规范是这样说的(尽管似乎没有明确的正式规范语言)。
PHP在遇到未知标识符时所执行的操作会输出E_NOTICE错误,以告知您使用了未知标识符,然后假设您打算将该标识符用作字符串。< / p>
<?php
$foo = unknown_identifier;
echo 'Now printing: ' . $foo; // prints 'Now printing: unknown_identifier' (PHP 5.2.6)
?>
您没有看到任何错误的原因可能是因为E_NOTICE错误低于您的错误报告阈值。您可以使用error_reporting指令更改此阈值:
<?php
error_reporting(E_ALL);
$foo = unknown_identifier;
echo 'Now printing: ' . $foo;
?>
这将输出Yacoby上面发布的“通知”错误消息。
请注意,误导性地the E_ALL error reporting directive does not in fact include all reporting levels in PHP 5.x。在PHP 5中,您需要使用E_ALL | E_STRICT
来启用所有错误消息。
- 编辑:被许多人击败。
答案 3 :(得分:0)
我所知道或曾经使用的所有语言都使用括号来描述函数,它们是否不带参数(void)或有参数列表(可选或不可选)。 你会习惯的。也许这是来自C的宿醉,包括所有它的功能原型和所有。
话虽如此,PHP中的回声功能很奇怪,因为它不是一个功能,但它是一个声明 - 去图。
答案 4 :(得分:-1)
()表示要调用该函数。没有它,你可以传递参考。例如(PHP 5.3):
$callable = session_start;
$callable();