echo与大括号和没有大括号之间有什么区别,为什么两种方法都存在?

时间:2013-05-22 09:36:10

标签: php

问题在于标题。

我认为我们大多数人在PHP中的程序都学会了echo "string";。虽然常见,但我想知道为什么我们使用它与任何其他功能如此不同。

那么我们为什么要这样做:

echo "Some String";

而不是

echo("Some String");

为什么两者都存在并且行为不同?有没有提到这个选择的原因?

编辑:我看到我的问题充斥着downvotes和upvotes。在任何一种方式投票时都要有建设性。

人们参考php文档,声明echo是一种语言结构,因此使用的方式不同。但在这种情况下,既然我们都可以将它用作构造和功能:这是首选方法?为什么它应该是两种方式实现,而它应该只是一种语言构造?

修改2 :与上述内容相同,非常重要requirerequire_onceincludeinclude_once。我在网上找不到任何解释 - 为什么这些结构也实现了功能性(在echo()的情况下,以一种有缺陷的方式)。

3 个答案:

答案 0 :(得分:9)

来自php.net

  

echo实际上并不是一个函数(它是一种语言结构),所以你   不需要在括号中使用括号。


  

如果要传递多个参数来回显参数   不得括在括号内。

示例(自PHP 5.4.14起)

<?php
header('Content-Type: text/plain');

echo(1);        // < works fine

echo(1, 2, 3);  // < Parse error: syntax error, unexpected ',' on line 6

echo 1;         // < works fine

echo 1, 2, 3;   // < works fine
?>

UPDv1:

  

注意:因为这是一种语言结构,而不是一种功能   无法使用变量函数调用。

<?php
header('Content-Type: text/plain');

$print = 'print_r';
$print(1);      // < works fine

$echo = 'echo';
$echo(1);       // < Fatal error: Call to undefined function echo() on line 8
?>

UPDv2:

截至include(同样适用于requirerequire_onceinclude_once),它可能有 return值< / EM> 即可。例如:

fileA.php:

<?php return 1; ?>

fileB.php:

<?php return 'abc'; ?>

测试:

<?php
header('Content-Type: text/plain');

echo (include 'fileA.php'); // one way
echo PHP_EOL;
echo include('fileB.php');  // another way
?>

节目:

1
abc

php.net的例子#4 #5 中提及。

因为像include 'fileA.php' == 'OK'这样的表达式不明显(根据operator precedence),您应该将它们括在括号中,或者使用“类似函数”的方法:(include 'fileA.php') == 'OK'或{{1} }。

答案 1 :(得分:2)

来自PHP文档

  

echo实际上并不是一个函数(它是一种语言结构),所以你   不需要使用括号。回声(与其他一些不同   语言结构)不像一个函数,所以它不能   总是在函数的上下文中使用。另外,如果你想要的话   要将多个参数传递给echo,参数一定不能   括在括号内

这不是一个功能,因此没有括号

答案 2 :(得分:0)

因为它是一个语句(语言结构),它不是一个函数。因此,要区分函数和语句,就像这样使用它。