为什么“退出”需要括号?

时间:2010-09-29 08:06:19

标签: php

如果echo可以在没有括号的情况下工作,为什么exit不能?

5 个答案:

答案 0 :(得分:13)

它们都是语言结构(T_ECHO和T_EXIT),但不同种类。你可以使用不带括号的exit,但是如果你传递了值则不能。另一个怪癖是,如果你传递多个值,echo要求你 not 使用括号:

php > echo 'foo', 'bar';
foobar
php > echo ('foo', 'bar');
PHP Parse error:  syntax error, unexpected ',' in php shell code on line 1

如果您现在正在考虑,“但这并不能解释为什么设计不一致”,欢迎使用PHP。

答案 1 :(得分:6)

仅仅因为有人将其编程为此类,并且没有人愿意改变它。回声和退出不共享代码,因此它们不一定以相同的方式工作。这没有充分的理由。

以下是PHP解析器的一些代码。如您所见,echo和exit后跟不同的表达式。退出后面没有任何内容,()或括号之间的表达式。 Echo后面跟着一个表达式:

unticked_statement:
        |       T_ECHO echo_expr_list ';'
        |       T_EXIT exit_expr        { ... }
...

exit_expr:
                /* empty */     { ... }
        |       '(' ')'         { ... }
        |       '(' expr ')'    { ... }
;


echo_expr_list:
                echo_expr_list ',' expr { ... }
        |       expr                    { ...; }
;

答案 2 :(得分:5)

PHP从C和(* nix)shell中获得了很多灵感。

shell中的echo不需要()。 而C中的exit()确实(而return没有)。

C中,return是一种语言结构(从函数调用返回),而exit()是执行程序终止的函数。

作为一种解释型语言,PHP可以自由选择将exit视为语言构造,或将()视为函数。它是一种语言结构,可用作exit;exit(x);

答案 3 :(得分:1)

退出可以,它只是不带字符串!?

  

无效退出([string $ status ])   void 退出([int $ status ])


  

如果status是字符串,则此函数   在退出之前打印状态。

     

如果status是整数,那么该值   将用作退出状态和   没打印。退出状态应该是   在0到254范围内,退出状态   255由PHP保留,不得   使用。状态0用于   成功终止程序。

不使用退出的示例:

if(defined('EXIT_END'))
{
    exit;
}

答案 4 :(得分:-1)

也许因为exitecho第一个参数并停止脚本的函数?