6

命令 echo 不返回任何内容。但打印返回 1。总是。这个返回 1 的实际用途是什么?当然可以在表达式中使用它,但是如果表达式始终为真并导致使用更多代码,那么表达式不是没用吗?

<?php
unset($empty);
if(print ($empty)){
    echo "Yep sure thing. Print strikes again with a ", "1.";
}
?>

它不应该总是返回与下面相同的结果,那有什么意义呢?

<?php
print ($empty);
echo "Yep sure thing. Print strikes again with a ", "1.";
?>

这个问题是关于返回 1 而不是“Echo 允许回显多个用逗号分隔的字符串,而 print 不允许”等。

4

4 回答 4

3

print在现实世界中总是返回一个。如果您尝试执行 Inception,您可以设计一个print始终返回零的函数。这样,您可以检查您是在梦中还是在现实世界中。

然而实际上,print返回值的使用与简单的使用相同true。无限的 while 循环、打印调试信息等都是非常引人注目的用途,但它们是糟糕的设计(近乎疯狂),应该避免。

于 2013-05-23T09:08:04.487 回答
2

由于结果总是真实的,你可以用这样的表达式将它链接在一起:

if (print('debug stuff') && $a == 1) {
    // do stuff
} elseif (print('debug another') && $a > 56) {
    // do stuff
}

在评估条件时,它将像一种不影响结果的调试一样工作。

或者,在无限循环中使用:

while(print('still in the loop')) {
    // do something very exciting
}

虽然这些是你不能做的事情echo(会导致解析错误),但它的用处基本上只限于测试和调试阶段,而不是运行阶段。

于 2013-05-23T08:47:15.977 回答
1

我看不到任何有用的表达方式。但我可以创造一些奇怪的:

对于循环短打印机:

for($i=0; $i<100; $i+=print($i.')<br/>')) ;

While循环打印计数器:

//$result is some db result
$rowCounter = 0;
while($row = $result->fetchAssoc()) {
    $rowCounter += print($row['column']);
}
于 2013-05-23T09:06:24.413 回答
0
**echo**

No return value
Outputs one or more strings separated by commas

  e.g. echo "String 1", "String 2"

**print**

Returns 1, so it can be used in an expression
Outputs only a single string

例如 if ((print "foo") && (print "bar"))

于 2013-05-23T08:52:17.977 回答