代码之家  ›  专栏  ›  技术社区  ›  Mark Robinson

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

  •  3
  • Mark Robinson  · 技术社区  · 15 年前

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

    session_start;
    

    当我应该使用:

    session_start();
    

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

    也许那时,我想,这是区分函数和变量的一种懒惰的方法——但后来我记住,它不能像变量要求的那样$

    有人能告诉我为什么需要括号吗?还有为什么不用括号就不会出错?

    5 回复  |  直到 13 年前
        1
  •  9
  •   Yacoby    15 年前

    我收到通知(设置了错误报告 E_ALL ):

    注意:在/t.php的第5行使用未定义的常量session-start-assumed'session-start'

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

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

    $myArray[myString] = 25;
    
        2
  •  2
  •   Aleksandar Vucetic    15 年前

    如果函数没有偏振器,你就不能区分函数和常量。但奇怪的是,它没有抛出错误……您在php.ini文件中关闭了错误吗?

        3
  •  1
  •   voetsjoeba    15 年前

    括号是必需的,因为PHP的语言规范是这样说的(尽管似乎没有找到语言的明确的正式规范)。

    当php遇到未知标识符时,它会输出一个e-notice错误,让您知道使用了未知标识符, 然后假设您打算将该标识符用作字符串 .

    <?php
    $foo = unknown_identifier;
    echo 'Now printing: ' . $foo; // prints 'Now printing: unknown_identifier' (PHP 5.2.6)
    ?>
    

    您没有看到任何错误的原因很可能是因为电子通知错误低于您的错误报告阈值。您可以使用错误报告指令更改此阈值:

    <?php
    error_reporting(E_ALL);
    
    $foo = unknown_identifier;
    echo 'Now printing: ' . $foo;
    ?>
    

    这将输出yacoby上面发布的“notice”错误消息。

    注意,误导地, the E_ALL error reporting directive does not in fact include all reporting levels in PHP 5.x . 在php 5中,您需要使用 E_ALL | E_STRICT 启用所有错误消息。

    --编辑:被许多人打败了。

        4
  •  0
  •   luvieere    15 年前

    我所知道或曾经使用过的所有语言都使用括号来描述函数,不管它们是否不带参数(void)或是否有参数列表(可选)。 你习惯了。也许这是C的遗留物,它有所有的函数原型。

    尽管如此,PHP中的echo函数是一个奇怪的函数,因为它不是一个很好的函数,但它是一个语句-执行图。

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

        5
  •  -1
  •   ChrisSmith..zzZZ    13 年前

    ()表示要调用函数。没有它,您就可以传递引用。例如(php 5.3):

    $callable = session_start;
    $callable();