为什么"退出"需要括号?

Ema*_*sev 5 php

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

Mat*_*hen 13

它们都是语言结构(T_ECHO和T_EXIT),但不同种类.您可以在没有括号的情况下使用exit,但如果传递值则不能.另一个怪癖是,如果你传递多个值,echo要求你不要使用括号:

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

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


Sjo*_*erd 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                    { ...; }
;
Run Code Online (Sandbox Code Playgroud)


Rin*_*g Ø 5

PHP从C和(* nix)外壳中获得了很多启发。

echo壳不需要()的。而exit()用C做(而return没有)。

在中Creturn是语言构造(从函数调用返回),exit()而是执行程序终止的函数。

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