2010-11-10 88 views
0

我有這樣的功能:如何「呼應」的函數結果到另一個函數?

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    echo '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 

不返回,但呼應的結果。

我想使用它,因爲它是到另一個功能:

function ItkMakeMo($NomDebVar) { 
$Output = ' 
    <tr>  
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>'.MakeInput($NomDebVar.'moshj','IntInput').'</td> 
    </tr> 
'; 
echo $Output; 

}

所以這個解決方案不起作用,PHP發送MakeInput輸出的「回聲$輸出」前

+0

在我看來,如何使用功能你不明白嗎? http://php.net/manual/en/language.functions.php – MatTheCat 2010-11-10 10:22:02

+2

大,3個答案正好30秒,一個新的記錄一樣???? – Grumpy 2010-11-10 10:23:07

+0

不得不票投給他們的所有了;) – Grumpy 2010-11-10 10:23:49

回答

1

如果由於某種原因,你不能改變MakeInput()或將採取更多的努力比它的價值去改變它,那麼你可以直接從ItkMakeMo()呼應輸出:

function ItkMakeMo($NomDebVar) { 
echo ' 
    <tr>  
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>'; 

MakeInput($NomDebVar.'moshj','IntInput'); 

echo '</td> 
    </tr> 
'; 
} 

然後MakeInput()輸出會在正確的地方。

如果可能的話,通常最好不要在功能直接輸出,而是返回輸出爲一個字符串,那麼你可以將它輸出,當你調用該函數。

1

,而不是在你的函數使用的回聲,使用回:

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
1

嘗試返回字符串函數MakeInput而不是呼應它,

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
0
function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
5

你應該return值:

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 

後來echo它。

1

你的具體情況,我想嘗試呼應輸出向右走,沒有先在變量保存它。

function ItkMakeMo($NomDebVar) { 
echo ' 
    <tr>  
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>'; 
MakeInput($NomDebVar.'moshj','IntInput').'</td> 
echo ' </tr> 
'; 
} 

但正如別人說,那肯定是最好的改變函數返回值,而不是echo它。不僅僅是在這種情況下,而是作爲一般的最佳實踐。所以只有在你出於某種原因不能自己改變MakeInput的情況下才可以試試。

+0

由於'MakeInput()'是'echo'ing,因此它仍然會在'ItkMakeMo()'字符串之前輸出'MakeInput()'字符串,並且不能連接。 – Aether 2010-11-10 10:39:17

+0

這是一個好點@乙醚,我已經改變了處理這個問題的功能。 – Rob 2010-11-10 15:15:54

0

在第一個功能改變回聲返回:

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
0

既然你說你不希望修改MakeInput功能,使用輸出緩衝。

function ItkMakeMo($NomDebVar) { 
    ob_start(); 
    MakeInput($NomDebVar.'moshj','IntInput'); 
    $input = ob_get_clean(); 
    $Output = ' 
     <tr>  
      <td>Test</td> 
     </tr> 
     <tr> 
      <td>'.$input.'</td> 
     </tr> 
    '; 
    echo $Output; 
} 

如果您不需要$輸出變量,但需要MakeInput呼應,我會遵循什麼羅布建議。按照這個說法,遵循其他人寫的內容,因爲這對編程不佳的人來說只是一種醜陋的方式。

+0

這個解決方案可以工作,但MakeInput仍然在ob_get_flush() – younes0 2010-11-10 10:38:50

+0

Opps之前輸出,我的意思是ob_get_clean!感謝您指出了這一點。 – 2010-11-10 10:49:34

+0

我會使用'$ input = ob_get_contents(); ob_end_clean();'如果採取這種方法。 'ob_get_flush();'調用時輸出緩衝區的內容。 編輯:Good call,@Phil R .:'ob_get_clean()'兩者兼而有之。 – Aether 2010-11-10 10:49:38

相關問題