2016-05-13 4 views
0

私は関数を持っており、完了したら出力ログを電子メールに集める必要があります。それは次のようになります。some text || some more text || last line of text:今内部関数から親変数への文字列の追加

function blabla() { 
    $emailMessage = "some text"; 

    $emailMessage .= "some more text"; 

    function foo() { 
    for ($x = 1; $x <= 20; $x++) { 
     $emailMessage .= 'Call #' . $x; 
     // then doing an API call 
     return $response; 
    } 
    } 

    $res = foo(); 

    $emailMessage .= "last line of text"; 

} 

$emailMessageは次のようになります。内部関数のテキストは付加されません。私はグローバル変数を使用some text || some more text || call #1 || call #2 ||... || last line of text

------ ------ EDIT @kamal PALへ

ありがとう:どのように私はそれがこのように見えるように取得することができます

。結果は次のようになります。

function blabla() { 
     global $emailMessage; 
     $emailMessage = "some text"; 

     $emailMessage .= "some more text"; 

     function foo() { 
     global $emailMessage; 
     for ($x = 1; $x <= 20; $x++) { 
      $emailMessage .= 'Call #' . $x; 
      // then doing an API call 
      return $response; 
     } 
     } 

     $res = foo(); 

     $emailMessage .= "last line of text"; 

    } 
+0

なぜ「内部機能」を使用しますか? – zoubida13

答えて

1

より明確にされており、子関数は、独自のスコープのしています。私は、このタスクを達成するために、2つのオプションを考えることができ

:参考引数として渡す

  • グローバル変数を使用して

    • を(以下の例を参照)

    function blabla() { 
        $emailMessage = "some text".PHP_EOL; 
        $emailMessage .= "some more text".PHP_EOL; 
    
        function foo(&$emailMessage) { // passed as ref argument 
        for ($x = 1; $x <= 20; $x++) { 
          $emailMessage .= 'Call #' . $x.PHP_EOL; 
          // then doing an API call 
          //return $response; //it will exit function 
        } 
        } 
    
        $res = foo($emailMessage); 
    
        $emailMessage .= "last line of text".PHP_EOL; 
        return $emailMessage; 
    
    } 
    echo blabla(); 
    

    デモ: https://eval.in/571036

  • +0

    ああありがとうございます。だから私はグローバル変数に行った。私はjavascriptスコープに慣れている - それはなぜ私はグローバルが必要ではないと思った;-) – Seb

    0

    あなたは完全に別の変数名ですか?

    $emailResult .= 'Call #' . $x; 
    

    を置き換えてください:

    $emailMessage .= 'Call #' . $x; 
    
    +0

    申し訳ありませんが、例の中だけです!私はそれを編集しました... – Seb

    0

    それはスコープによるものだ適切な(外部の)機能

    function blabla() { 
        $emailMessage = "some text"; 
    
        $emailMessage .= "some more text"; 
    
        $emailMessage = foo($emailMessage); 
        $emailMessage .= "last line of text"; 
    
    } 
    
    
    function foo($emailMessage) { 
        for ($x = 1; $x <= 20; $x++) { 
         $emailResult .= 'Call #' . $x; 
         // then doing an API call 
         return $emailResult; 
        } 
    } 
    
    0

    の例に従います。これがあなたに役立つことを願っています。

    <?php 
    echo blabla(); 
    
    
    function blabla(){ 
    
    $emailMessage = "some text|"; 
    
    $emailMessage .= "some more text|"; 
    
    function foo() { 
    $emailResult=""; 
    for ($x = 1; $x <= 20; $x++) { 
    
        $emailResult .= "Call #".$x."|"; 
    
    } 
    
        return $emailResult; 
    } 
    
    $res = foo(); 
    
    $emailMessage .=$res; 
    
    $emailMessage .= "last line of text"; 
    
    return $emailMessage; 
    
    } 
    ?> 
    
    関連する問題