无法第二次调用php函数

无法第二次调用php函数,php,Php,这段代码是不言自明的。在我调用该函数并使其正常工作后,其他调用将失败: <?php function htmlFilter_array(&$html_array) { function nested_clean(&$value) { $value = htmlentities($value, ENT_QUOTES, "UTF-8"); } array_walk_recursive($html_array, 'nested_cl

这段代码是不言自明的。在我调用该函数并使其正常工作后,其他调用将失败:

<?php

function htmlFilter_array(&$html_array)
{
    function nested_clean(&$value) 
    {
      $value = htmlentities($value, ENT_QUOTES, "UTF-8");
    }
    array_walk_recursive($html_array, 'nested_clean');
}

$arr1=array("id"=>"1");
echo "line 1 <br/>";
$arr2=array("id"=>"2");
echo "line 2 <br/>";
$arr3=array("id"=>"3");
echo "line 3 <br/>";
htmlFilter_array($arr1);
echo "line 4 <br/>";
htmlFilter_array($arr2);
echo "line 5 <br/>";
htmlFilter_array($arr3);
echo "line 6 <br/>";

?>

为什么第5行和第6行不能运行?

实际上,在开发代码时,您应该显示错误和警告。它会告诉你问题出在哪里

E_ERROR : type 1 -- Cannot redeclare nested_clean() (previously declared in main/code_145461.php:5) -- at line 5
通过将函数定义嵌套在另一个函数中,可以重新定义函数

我不知道你为什么要这样嵌套你的函数

试一试


实际上,您应该在开发代码时显示错误和警告。它会告诉你问题出在哪里

E_ERROR : type 1 -- Cannot redeclare nested_clean() (previously declared in main/code_145461.php:5) -- at line 5
通过将函数定义嵌套在另一个函数中,可以重新定义函数

我不知道你为什么要这样嵌套你的函数

试一试


第一:打开错误报告。如果PHP不告诉您什么时候东西坏了,您就无法编程

回答您的问题:您只能定义一次函数。第二次是因为您试图重新定义函数而中断。最简单的方法是不嵌套函数,PHP无论如何都不允许嵌套这样的函数(它都在全局范围内)

替代解决方案:

function htmlFilter_array(&$html_array)
{
    $nested_clean = function(&$value) 
    {
      $value = htmlentities($value, ENT_QUOTES, "UTF-8");
    };
    array_walk_recursive($html_array, $nested_clean);
}

第一:打开错误报告。如果PHP不告诉您什么时候东西坏了,您就无法编程

回答您的问题:您只能定义一次函数。第二次是因为您试图重新定义函数而中断。最简单的方法是不嵌套函数,PHP无论如何都不允许嵌套这样的函数(它都在全局范围内)

替代解决方案:

function htmlFilter_array(&$html_array)
{
    $nested_clean = function(&$value) 
    {
      $value = htmlentities($value, ENT_QUOTES, "UTF-8");
    };
    array_walk_recursive($html_array, $nested_clean);
}
函数嵌套_clean(&$value)
{
$value=htmlentities($value,ENT_引号,“UTF-8”);
}
函数htmlFilter_数组(&$html_数组)
{
数组_walk_recursive($html_数组,'nested_clean');
}
$arr1=数组(“id”=>“'1”);
回显“第1行
”; $arr2=数组(“id”=>“'2”); 回音“第2行
”; $arr3=数组(“id”=>“'3”); 回音“第3行
”; htmlFilter_阵列($arr1); 回声“第4行
”; htmlFilter_阵列($arr2); 回声“第5行
”; htmlFilter_阵列($arr3); 回声“第6行
”; 印刷费($arr1);
为什么不使用上面的代码

否则,您可以使用
闭包
函数。

函数嵌套\u clean(&$value)
{
$value=htmlentities($value,ENT_引号,“UTF-8”);
}
函数htmlFilter_数组(&$html_数组)
{
数组_walk_recursive($html_数组,'nested_clean');
}
$arr1=数组(“id”=>“'1”);
回显“第1行
”; $arr2=数组(“id”=>“'2”); 回音“第2行
”; $arr3=数组(“id”=>“'3”); 回音“第3行
”; htmlFilter_阵列($arr1); 回声“第4行
”; htmlFilter_阵列($arr2); 回声“第5行
”; htmlFilter_阵列($arr3); 回声“第6行
”; 印刷费($arr1);
为什么不使用上面的代码


否则您可以使用
关闭
功能。

我认为您应该首先打开错误报告。 但是从代码来看,我100%确信第5-6行不会产生任何输出,因为在
htmlFilter\u数组中

它将显示一些错误,如
无法重新声明嵌套函数\u clean

我认为您应该首先打开错误报告。 但是从代码来看,我100%确信第5-6行不会产生任何输出,因为在
htmlFilter\u数组中

它将显示一些错误,如
无法重新声明嵌套的函数\u clean

问题是您使用嵌套函数,函数会一次又一次地重新声明

function nested_clean(&$value) 
{
  $value = htmlentities($value, ENT_QUOTES, "UTF-8");
}

function htmlFilter_array(&$html_array)
{
    array_walk_recursive($html_array, 'nested_clean');
}

解决方案是在外部声明函数,即使您反复调用它。

问题在于您使用嵌套函数,函数会一次又一次地重新声明

function nested_clean(&$value) 
{
  $value = htmlentities($value, ENT_QUOTES, "UTF-8");
}

function htmlFilter_array(&$html_array)
{
    array_walk_recursive($html_array, 'nested_clean');
}

解决方案是在外部声明函数,即使您正在重复调用它。

尝试分离函数并调用htmlFilter\u数组中的嵌套\u clean。。。每次调用htmlFiler\u数组时声明它是没有用的

尝试分离函数并调用htmlFilter\u数组中的嵌套\u clean。。。每次调用htmlFiler_array时都声明它是没有用的。如果不想在其他函数之外访问该函数,可以使用匿名函数。(AKA closure)

如果您不想在其他函数之外访问该函数,可以使用匿名函数。(又名闭包)

如何修复?有什么方法可以破坏后生存函数吗?我只是想将嵌套函数与php的其余部分隔离开来。如何修复?有什么方法可以破坏after living函数吗?我只是想将嵌套函数与php的其余部分隔离开来。我可以解释所有必需的php.ini设置,或者你可以在10秒内搜索它并自己找到:)你可以做到!嗯,我使用的是
错误报告(E_ALL)
,它不起作用。显示错误也需要打开,你应该在php.ini中修复它,而不是在你的脚本中。我可以解释所有需要的php.ini设置,或者你可以在10秒内搜索它并自己找到:)你可以做到!嗯,我使用的是
错误报告(E\u ALL)
,它不起作用。显示错误也需要打开,你应该在php.ini中修复它,而不是在脚本中。