2015-11-06 67 views
3

我试图打印一个简单的变量连接一个函数调用,这就是我得到的!功能和变量执行优先

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

这里回声打印变量招呼由函数调用连接在一起,因此,应该使输出Hello This is a function!!,而不是输出This is a function!! Hello

  • 这是如何工作,可以解释这种行为?
+2

因为你'回声'字符串,而不是'返回'它。 –

+0

因为我在这里使用了连接运算符,所以echo本质上应该做的是print $ hello并将函数输出连接到$ he​​llo吗? – theblackpearl

+0

尝试在期间的任一侧放置一个空间 – user2027202827

回答

3

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

return“这是一个函数!!”;

..将与您的原始点加入格式(正如其他人指出的那样)。

可替代地,改变回声线:

回声$你好,测试();

..也有效。 $ hello是一个字符串,并得到回应,然后〜测试()得到评估。

+3

有趣的答案。我找不到有关此行为/优先顺序的任何文档。你不会碰巧有一个链接,是吗?这有助于澄清/备份您的答案,并有助于未来访问者回答问题/答案。 –

+1

@Fred。事实证明这是一个有趣且看似简单的问题。我找不到直接的文档,也许应该这样说(感谢礼貌的微调),但我测试了各种变体,这似乎是实际发生的事情。函数在echo产生输出之前得到评估,但只能以点形式。我们认为这样一种简单的语言结构是理所当然的,但文件显示回声有一些错综复杂的规则,这些规则并没有被视为错误。那么这是特定的回声还是有更通用的应用程序? – Berniev

+0

是的,这是一个有趣的问题。其他人则提交了“修复”他们的代码的答案,但“真正”的问题是关于“解释”其行为。我只是好奇,如果你有关于它的文档,我无法找到,这就是为什么我“推”;-)公平不够,我认为你的解释是相当不错的。我会高兴。这将是很好,让这些PHP.net的人之一访问该问题。我尽力为他们的问题使用一个好的标题,包括标签。时间会告诉我猜。至于是否具体回应,我不能肯定地说。 *欢呼* –