2011-06-23 113 views
1

這是一些PHP代碼示例;php等待函數

<?php 
function myFunc() { 
    echo "blue"; 
} 

for ($i=1;$i<=5;$i++) { 
    echo "I like the colour " . myFunc() . "</br>"; 
} 
?> 

這產生輸出;

blueI like the colour 
blueI like the colour 
blueI like the colour 
blueI like the colour 
blueI like the colour 

在我的實際項目中,myFunc正在進行一個MySQL調用(如果它有任何區別的話)。如何讓我的循環等待該功能返回前進行​​否則輸出如上所述的失序。

回答

3

問題是myFunc()在連接之前被評估。從myFunc()返回值並在循環中使用該值,而不是在myFunc()中回顯。

+0

那麼,爲什麼輸出失序呢? – jwbensley

+0

@javano,請參閱我的編輯 – Brad

+1

@javano:這就是PHP的工作方式,在'echo'語句中的函數調用在任何輸出由echo完成之前執行,所以你的ech o函數內部執行/輸出在父回聲調用的輸出發生之前 –

2

你不想在你的功能中使用echo。改爲使用return

當您評估循環時,首先會計算函數以查看是否存在要放入字符串的返回值。由於您調用了echo而不是return,函數的回顯正在發生,然後發生了迴路中的回聲。

1

使用return語句:

<?php 
function myFunc() { 
    return "blue"; 
} 
2

嘗試更改代碼如下:

<?php 
function myFunc() { 
    return "blue"; 
} 

for ($i=1;$i<=5;$i++) { 
    echo "I like the colour " . myFunc() . "</br>"; 
} 
?> 

注意到return而非echo

1
<?php 
    function myFunc() { 
     return "blue"; 
    } 

    for ($i=1;$i<=5;$i++) { 
     $color = myFunc(); 
     echo "I like the colour " . $color . "</br>"; 
    } 
    ?> 
1

這不是你的問題,你的問題是你有兩個動作。

you are concatenating a string 
you are calling a function. 

結果字符串是「我喜歡顏色」之間的聯繫。 myFunc()。 「」,但在連接這些值之前,您必須執行myFunc()。

當您執行myFunc時,您正在向輸出寫入「藍色」。

然後,結果是(對於每一行)。

blueI like the colour
(第一,評估myFunc的()的,然後拼接的返回值(無效)的靜態字符串

也許你想這樣做:?

<?php  
function myFunc() { 
     return "blue"; 
    } 
for ($i=1;$i<=5;$i++) { 
    echo "I like the colour " . myFunc() . "</br>"; 
} 

>

+0

該死的,現在人們對我來說這似乎是非常明顯的。感謝您清理那個,完全有道理:) – jwbensley