Cannot redeclare a function error

不羁岁月 提交于 2019-12-12 00:41:10

问题


I am trying to remove the slashes from magic quotes from an array. So I have two functions, one is to remove the slashes, another is to set the variable.

// 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);

I get this error in my live server which I don't understand it,

Fatal error: Cannot redeclare stripslashes_array() (previously declared in json.php:16) in json.php on line 16

line 16 refers to this line function stripslashes_array($array) which does not seem to have any mistake.

Any idea how to fix this?


回答1:


What happens is that everytime you call the function strip_magic_quotes PHP tries to declare the function stripslashes_array.

Why do you think you want to nest that function? If you really want to do it this way (which you shouldn't) you can change it to:

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

Although this fixes the issue you simply shouldn't do it in the first place, because:

  • it would be better to disable (if possible) magic* for the better of mankind.
  • declaring functions in functions (although possible) should really be avoided in almost all cases.

Or you could simply just drop that inner function completely if you don't need it somewhere else and just let the code run in the outer function.




回答2:


Nested named functions are almost useless for exactly this reason.

You have to either move the nested function out or do an explicit function_exists check.

You can consider using an anonymous function in PHP 5.3 or above.



来源:https://stackoverflow.com/questions/9935231/cannot-redeclare-a-function-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!