3

我花了 3 个小时想知道为什么我不能开始一个会话,然后意识到我使用了:

session_start;

当我应该使用时:

session_start();

我根本没有收到任何错误消息!

也许那时,我想,这是区分函数和变量的一种懒惰方式 - 但后来记住它不能因为变量需要 $

谁能告诉我为什么需要括号,以及为什么不使用括号时没有错误?

4

5 回答 5

9

我收到通知(已将 error_reporting 设置为E_ALL):

注意:使用未定义的常量 session_start - 在第 5 行的 /t.php 中假设为“session_start”

函数总是需要括号,因为否则(如您所见)您无法区分函数和常量之间的区别。由于应该编写代码,以便阅读它的人可以理解它,不允许读者查看它是常量还是函数调用,这使得它更难阅读和调试。

由于向后兼容性,我认为这是一个通知而不是错误错误,因为一些较旧的代码倾向于使用不带引号的字符串访问数组,如果没有具有该名称的常量,PHP 会将其视为带引号的字符串。

$myArray[myString] = 25;
于 2010-05-14T10:50:28.493 回答
2

如果函数没有括号,则无法区分函数和常量...但奇怪的是它不会引发错误...您是否在 php.ini 文件中关闭了错误?

于 2010-05-14T10:53:47.177 回答
1

括号是必需的,因为 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来启用所有错误消息。

——编辑:被很多人打得落花流水。

于 2010-05-14T11:05:23.753 回答
0

我知道或曾经使用过的所有语言都使用括号来描述函数,无论它们不带参数(void)还是有参数列表(可选或不带参数)。你会习惯的。也许它是 C 的遗留物,它包含所有的函数原型和所有东西。

话虽如此,PHP 中的 echo 函数是一个奇怪的函数,因为它不是一个函数,而是一个语句 - 看图。

看看http://en.wikipedia.org/wiki/Function(computer_science)

于 2010-05-14T10:53:38.993 回答
-1

() 表示要调用该函数。没有它,您可以传递参考。例如(PHP 5.3):

$callable = session_start;
$callable();
于 2010-05-14T10:54:37.863 回答