无法重新声明功能错误

时间:2012-03-29 23:49:07

标签: php function php-5.3 magic-quotes-gpc

我正在尝试从数组中删除魔术引号中的斜杠。所以我有两个函数,一个是删除斜杠,另一个是设置变量。

// Strip slashes from an array.
function strip_magic_quotes($array)
{
    if (get_magic_quotes_gpc())
    {
        function stripslashes_array($array)
        {
            return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
        }
        return stripslashes_array($array);
    }
    return $array;
}

function set_variable($array = array(),$key,$params = array())
{
    # If $params is not an array, let's make it array with one value of former $params.
    if(!is_array($params)) $params = array($params);
    if(!is_array($array)) parse_str($array, $array);

    # Strip slashes from the array if get_magic_quotes_gpc is on.
    $array = strip_magic_quotes($array);

    # This will return true or false.
    if(in_array('boolean', $params)) return isset($array[$key]) ? true : false;

    # This will regard '0' as a string.
    # Return value or 0 as a string.
    elseif(in_array('0', $params)) return isset($array[$key]) && ($array[$key] == '0') ? trim($array[$key]) : null;

    # Return null as string if 'null_to_string' is set.
    elseif(in_array('null_to_string', $params)) return isset($array[$key]) && !empty($array[$key]) ? trim($array[$key]) : 'null';

    # Check if the key is an array.
    elseif(isset($array[$key]) && !empty($array[$key]) && is_array($array[$key])) return isset($array[$key]) && !empty($array[$key]) ? $array[$key] : null;

    # This will regard '0', empty space as falsey.
    # Return value or null.
    else return isset($array[$key]) && !empty($array[$key]) ? trim($array[$key]) : null;
}

$array = array(
    'name'=>'Hello',
    'type'=>'{"page":"page"}'
);


# set the required array.
$items_variable = array(
    'name',
    'type'
);

# loop the array.
foreach( $items_variable as $item_variable )
{
    # set the main variables.
    $$item_variable = set_variable($array,$item_variable);
}

print_r($type);

我在我的实时服务器中收到此错误,我不明白,

  

致命错误:无法重新声明stripslashes_array()(之前   在json.php中声明:16)in   第16行的json.php

第16行引用此行function stripslashes_array($array),似乎没有任何错误。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

由于这个原因,嵌套的命名函数几乎没用。

您必须移出嵌套函数或进行明确的function_exists检查。

您可以考虑在PHP 5.3或更高版本中使用anonymous function

答案 1 :(得分:1)

每次调用函数strip_magic_quotes时,PHP会尝试声明函数stripslashes_array

为什么你认为你想要嵌套这个功能?如果您真的想这样做(您不应该这样做),您可以将其更改为:

if (get_magic_quotes_gpc() && !function_exists('stripslashes_array')) {

虽然这解决了这个问题,但你首先不应该这样做,因为:

  • 最好禁用(如果可能的话)魔法*以使人类更好。
  • 几乎在所有情况下都应该避免在函数中声明函数(尽管可能)。

或者你可以简单地完全放弃那个内部函数,如果你不需要它在其他地方,只需让代码在外部函数中运行。