2015-11-06 54 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的人之一訪問該問題。我盡力爲他們的問題使用一個好的標題,包括標籤。時間會告訴我猜。至於是否具體迴應,我不能肯定地說。 *歡呼* –