我花了 3 个小时想知道为什么我不能开始一个会话,然后意识到我使用了:
session_start;
当我应该使用时:
session_start();
我根本没有收到任何错误消息!
也许那时,我想,这是区分函数和变量的一种懒惰方式 - 但后来记住它不能因为变量需要 $
谁能告诉我为什么需要括号,以及为什么不使用括号时没有错误?
我花了 3 个小时想知道为什么我不能开始一个会话,然后意识到我使用了:
session_start;
当我应该使用时:
session_start();
我根本没有收到任何错误消息!
也许那时,我想,这是区分函数和变量的一种懒惰方式 - 但后来记住它不能因为变量需要 $
谁能告诉我为什么需要括号,以及为什么不使用括号时没有错误?
我收到通知(已将 error_reporting 设置为E_ALL
):
注意:使用未定义的常量 session_start - 在第 5 行的 /t.php 中假设为“session_start”
函数总是需要括号,因为否则(如您所见)您无法区分函数和常量之间的区别。由于应该编写代码,以便阅读它的人可以理解它,不允许读者查看它是常量还是函数调用,这使得它更难阅读和调试。
由于向后兼容性,我认为这是一个通知而不是错误错误,因为一些较旧的代码倾向于使用不带引号的字符串访问数组,如果没有具有该名称的常量,PHP 会将其视为带引号的字符串。
$myArray[myString] = 25;
如果函数没有括号,则无法区分函数和常量...但奇怪的是它不会引发错误...您是否在 php.ini 文件中关闭了错误?
括号是必需的,因为 PHP 的语言规范是这样说的(即使似乎没有要找到的语言的明确正式规范)。
PHP 在遇到未知标识符时会输出一个 E_NOTICE 错误,让您知道使用了未知标识符,然后假定您打算将该标识符用作字符串。
<?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 上面发布的“通知”错误消息。
请注意,具有误导性的是,E_ALL 错误报告指令实际上并不包括 PHP 5.x 中的所有报告级别。在 PHP 5 中,您需要使用E_ALL | E_STRICT
来启用所有错误消息。
——编辑:被很多人打得落花流水。
我知道或曾经使用过的所有语言都使用括号来描述函数,无论它们不带参数(void)还是有参数列表(可选或不带参数)。你会习惯的。也许它是 C 的遗留物,它包含所有的函数原型和所有东西。
话虽如此,PHP 中的 echo 函数是一个奇怪的函数,因为它不是一个函数,而是一个语句 - 看图。
() 表示要调用该函数。没有它,您可以传递参考。例如(PHP 5.3):
$callable = session_start;
$callable();