Php “我该怎么做?”;“回声”;一个函数导致另一个函数?
我有这个功能:Php “我该怎么做?”;“回声”;一个函数导致另一个函数?,php,function,syntax,echo,Php,Function,Syntax,Echo,我有这个功能: 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').'" />'; } 函数MakeInput($id,
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').'" />';
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
回声';
}
不会返回,但会重复结果
我想将其用于另一个函数:
function ItkMakeMo($NomDebVar) {
$Output = '
<tr>
<td>Test</td>
</tr>
<tr>
<td>'.MakeInput($NomDebVar.'moshj','IntInput').'</td>
</tr>
';
echo $Output;
函数ItkMakeMo($NomDebVar){
$Output=
试验
.MakeInput($NomDebVar.moshj','IntInput')。'
';
echo$输出;
}
因此此解决方案不起作用,PHP在“echo$output”之前发送MakeInput输出。与在函数中使用echo相反,请使用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').'" />';
}
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').'" />';
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}
尝试在函数MakeInput中返回字符串,而不是回显它
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}
您应该返回
值:
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').'" />';
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}
稍后,我会回显它。在您的特定情况下,我会尝试立即回显输出,而不首先将其存储在变量中
function ItkMakeMo($NomDebVar) {
echo '
<tr>
<td>Test</td>
</tr>
<tr>
<td>';
MakeInput($NomDebVar.'moshj','IntInput').'</td>
echo ' </tr>
';
}
函数ItkMakeMo($NomDebVar){
回声'
试验
';
MakeInput($NomDebVar.moshj','IntInput')。'
回声'
';
}
但正如其他人所说,最好更改函数以返回值,而不是重复它。不仅在这种情况下,而且作为一般最佳实践。因此,只有在由于某种原因无法自己更改MakeInput时,才可以尝试此操作。在第一个函数中,将echo更改为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').'" />';
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}
既然您说过不想修改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;
}
函数ItkMakeMo($NomDebVar){
ob_start();
MakeInput($NomDebVar.moshj','IntInput');
$input=ob_get_clean();
$Output=
试验
“.$input。”
';
echo$输出;
}
如果您不需要$output变量,但需要将MakeInput用于echo,我将遵循Rob的建议。话虽如此,请遵循其他人编写的内容,因为这只是一种处理糟糕编程的丑陋方式。如果出于某种原因您无法更改
MakeInput()
,或者更改它需要付出的努力超过了它的价值,那么您可以直接从ItkMakeMo()
回显输出:
函数ItkMakeMo($NomDebVar){
回声'
试验
';
MakeInput($NomDebVar.moshj','IntInput');
回声'
';
}
然后,MakeInput()
输出将位于正确的位置
如果可能的话,通常最好不要直接在函数中输出,而是以字符串形式返回输出,这样您就可以在调用函数时输出它。在我看来,您不了解如何使用函数?很好,3个答案在30秒内完全相同,这是一个新记录??他可能还有另一个原因要求使用“原样”函数。这个解决方案确实有效,但MakeInput仍然在ob_get_flush()之前输出,我将使用
$input=ob_get_contents();ob_end_clean()代码>如果采用这种方法<代码>ob_get_flush()代码>调用时输出缓冲区的内容。编辑:很好的调用,@Phil R.:ob\u get\u clean()
将两者结合在一起。这仍然会在ItkMakeMo()
字符串之前输出MakeInput()
字符串,因为MakeInput()
是echo
ing,并且不是可以连接的东西。这是@Aether的一个优点,我改变了函数来处理这个问题。
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;
}
function ItkMakeMo($NomDebVar) {
echo '
<tr>
<td>Test</td>
</tr>
<tr>
<td>';
MakeInput($NomDebVar.'moshj','IntInput');
echo '</td>
</tr>
';
}