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

Dam*_*eem 6 php

问题出在标题中.

我想我们大多数人都是用php学习的echo "string";.虽然常见,但我想知道为什么我们使用它与任何其他功能如此不同.

那我们为什么要:

echo "Some String";

代替

echo("Some String");

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

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

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

编辑2:同上差不多计数require,require_once,includeinclude_once.我在网上找不到任何解释 - 为什么这些结构也实现了功能性(在echo()的情况下,以一种有缺陷的方式).

Bli*_*itZ 9

来自php.net:

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


如果要将多个参数传递给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
?>
Run Code Online (Sandbox Code Playgroud)

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
?>
Run Code Online (Sandbox Code Playgroud)

UPDv2:

作为include(同样适用于require,require_onceinclude_once),它可能有一个返回.例如:

fileA.php:

<?php return 1; ?>
Run Code Online (Sandbox Code Playgroud)

fileB.php:

<?php return 'abc'; ?>
Run Code Online (Sandbox Code Playgroud)

测试:

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

echo (include 'fileA.php'); // one way
echo PHP_EOL;
echo include('fileB.php');  // another way
?>
Run Code Online (Sandbox Code Playgroud)

显示:

1
abc
Run Code Online (Sandbox Code Playgroud)

它在php.net的例子#4#5中提到过.

因为表达式include 'fileA.php' == 'OK'不明显(根据运算符优先级),您应该将它们括在括号中,或者使用"类似函数"的方法:(include 'fileA.php') == 'OK'include('fileA.php') == 'OK'.