为什么没有参数的PHP函数需要括号?

时间:2010-05-14 10:46:13

标签: php function parentheses

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

session_start;

当我应该使用时:

session_start();

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

也许那时,我想,这是一种将函数与变量区分开来的懒惰方式 - 但后来记得它不能像变量那样需要$

有人可以告诉我为什么需要括号,以及为什么不使用它们时会出现错误?

5 个答案:

答案 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中的回声功能很奇怪,因为它不是一个功能,但它是一个声明 - 去图。

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

答案 4 :(得分:-1)

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

$callable = session_start;
$callable();