6

问题在标题中。

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

那么我们为什么要:

echo "Some String";

代替

echo("Some String");

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

编辑:我看到我的问题充斥着反对票和赞成票。请在投票时保持建设性。

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

编辑 2:与上面几乎相同的require,require_once和. 我在网上找不到任何解释 - 为什么 - 这些构造也实现了功能(并且在 echo() 的情况下,以有缺陷的方式)。includeinclude_once

4

3 回答 3

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
?>

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(同样适用于require,require_onceinclude_once)开始,它可能有一个返回。例如:

文件A.php:

<?php return 1; ?>

文件B.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中提到了它。

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

于 2013-05-22T09:37:21.427 回答
2

来自 PHP 文档

echo 实际上不是一个函数(它是一种语言结构),因此您不需要使用括号。echo(与其他一些语言结构不同)的行为不像函数,因此它不能总是在函数的上下文中使用。另外,如果你想传递多个参数给echo,参数不能用括号括起来

它不是函数,因此没有括号

于 2013-05-22T09:37:35.320 回答
0

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

于 2013-05-22T09:37:39.040 回答