如果echo
可以在没有括号的情况下工作,为什么exit
不能?
答案 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)
也许因为exit
是echo
第一个参数并停止脚本的函数?