2011-06-23 93 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