【问题标题】:function and variable execution precedence函数和变量执行优先级
【发布时间】:2015-11-06 02:08:45
【问题描述】:

我尝试打印一个与函数调用连接的简单变量,这就是我得到的!

 <?php 
 $hello = "Hello ";
 function test(){
   echo "This is a function!! ";
 }
 echo $hello.test();
 ?>

这里的 echo 打印由函数调用连接的变量 hello,因此应该输出Hello This is a function!!,而不是输出This is a function!! Hello

  • 这是如何工作的,有人可以解释这种行为吗?

【问题讨论】:

  • 因为你 echoed 字符串,而不是 return 它。
  • 由于我在这里使用连接运算符,echo 本质上应该做的是打印 $hello 并将函数输出连接到 $hello 对吗?
  • 试着在句号的两边放一个空格
  • 它有什么不同?输出还是一样!
  • 对不起,你是对的,我不知道我在说什么 :) 你需要返回字符串,而不是像已经指出的那样在 test() 中回显它。

标签: php function variables operator-precedence


【解决方案1】:

test() 是一个 void 函数(它不返回任何内容),因此没有字符串可供 echo 立即回显,并且函数调用的优先级高于点,因此将首先评估并在返回之前执行它自己的回显进行字符串连接。

return "这是一个函数!!";

.. 将使用您原来的点连接格式(正如其他人指出的那样)。

或者,将回显线更改为:

echo $hello, test();

.. 也可以。 $hello 是一个字符串并被回显,~then~ test() 被评估。

【讨论】:

  • 有趣的答案。我找不到任何关于这种行为/优先顺序的文档。你不会碰巧有一个链接,对吗?这将有助于澄清/备份您的答案以及问题/答案的未来访问者。
  • @Fred。结果证明这是一个有趣且看似简单的问题。我找不到直接的文档,也许应该这么说(感谢礼貌的轻推),但我测试了各种变体,这似乎是实际发生的事情。函数在 echo 产生输出之前被评估,但仅限于点形式。我们认为这种简单的语言结构是理所当然的,但文档显示 echo 有一些复杂的规则,这些规则并未被视为错误。那么这是特定于 echo 还是有更通用的应用程序?
  • 是的,这是一个有趣的问题。其他人正在提交答案以“修复”他们的代码,但“真正的”问题是关于“解释”其行为。我只是好奇您是否有我无法找到的文档,这就是我“轻推”的原因;-) 很公平,我认为您的解释相当不错。我会投票。让其中一位 PHP.net 人员访问该问题会很好。我尽力为他们的问题使用一个好的标题,包括标签。时间会告诉我猜。至于是否特定于回声,我无法确定。 干杯
  • @Fred。在试图从源代码中弄清楚(太难了)之后,我发现 link 这解释了我之前提到的“优先级”是引擎工作方式的结果,还解释了为什么逗号版本的工作方式不同以及为什么它实际上是首选.有趣的是,我们没有看到用户空间中大量使用逗号方法。
  • 哇,多么棒的发现!有趣的是你应该提到逗号。我和我的一个朋友今天早些时候正在讨论这个问题,他提到了逗号。你们一定是同一个波长 ;-) 向你们致敬!
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2016-11-02
  • 2018-03-07
  • 2011-11-27
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多