php函数第二次无法调用

时间:2013-06-27 13:04:22

标签: php

此代码不言自明。在我调用该函数并且它工作正常后,其他调用将失败:

<?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行无法运行?

7 个答案:

答案 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时都没有使用它来声明它