2011-06-23 34 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コマンドの関数呼び出しはエコーで出力が行われる前に実行されるので、 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

これは問題ではありません。問題は2つの処置があることです。

you are concatenating a string 
you are calling a function. 

結果の文字列は、 "私は色が好き"の間のcontcatenationです。 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

さて、人々が私にこれをexmplaidしたので、それは驚くほど明白なようです。それをクリアしていただきありがとうございます、まったく意味があります:) – jwbensley

関連する問題