此代码不言自明。在我调用该函数并且它工作正常后,其他调用将失败:
<?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/>";
?>
这是结果:
line 1
line 2
line 3
line 4
为什么第5行和第6行无法运行?
答案 0 :(得分:2)
在开发代码时,您应该显示错误和警告。它会告诉你问题是什么。
E_ERROR : type 1 -- Cannot redeclare nested_clean() (previously declared in main/code_145461.php:5) -- at line 5
您正在通过将函数定义嵌套在另一个函数中来重新声明该函数。
我不确定你为什么会这样嵌套你的功能。
试
function htmlFilter_array(&$html_array)
{
array_walk_recursive($html_array, 'nested_clean');
}
function nested_clean(&$value)
{
$value = htmlentities($value, ENT_QUOTES, "UTF-8");
}
答案 1 :(得分:2)
如果您不希望在其他功能之外访问该功能,则可以使用匿名功能。 http://php.net/manual/en/functions.anonymous.php(AKA关闭)
答案 2 :(得分:0)
首先:开启错误报告。如果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);
}
答案 3 :(得分:0)
function nested_clean(&$value)
{
$value = htmlentities($value, ENT_QUOTES, "UTF-8");
}
function htmlFilter_array(&$html_array)
{
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/>";
print_r( $arr1 );
为什么不使用上述代码?
否则您可以使用Closure
功能。
答案 4 :(得分:0)
我认为你应该先打开错误报告。
但是从代码中我100%确定第5-6行没有产生输出,因为htmlFilter_array
它会显示一些错误,例如cannot redeclare function nested_clean
答案 5 :(得分:0)
问题是你使用嵌套函数,这个函数会一遍又一遍地重新声明。
function nested_clean(&$value)
{
$value = htmlentities($value, ENT_QUOTES, "UTF-8");
}
function htmlFilter_array(&$html_array)
{
array_walk_recursive($html_array, 'nested_clean');
}
解决方案是在外面声明函数,即使你重复调用它。
答案 6 :(得分:0)
尝试将函数分开并在html Filter_array中调用嵌套的clean ...每次调用htmlFiler_array时都没有使用它来声明它