2010-11-10 70 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

相关问题