Невозможно повторно объявить ошибку функции - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь удалить косые черты из магических кавычек из массива. Итак, у меня есть две функции: одна для удаления слешей, другая для установки переменной.

// 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) в json.php в строке 16

строка 16 относится к этой строке function stripslashes_array($array), которая, похоже, не содержит ошибок.

Есть идеи, как это исправить?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

В результате каждый раз, когда вы вызываете функцию strip_magic_quotes PHP пытается объявить функцию stripslashes_array.

Почему вы думаете, что хотите вложить эту функцию? Если вы действительно хотите сделать это таким образом (чего не следует делать), вы можете изменить его на:

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

Хотя это решает проблему, вы просто не должны делать это в первую очередь, потому что:

  • было бы лучше отключить (если это возможно) магию * на благо человечества.
  • объявления функций в функциях (хотя это возможно) следует избегать практически во всех случаях.

Или вы можете просто полностью отбросить эту внутреннюю функцию, если она вам не нужна, и просто запустить код во внешней функции.

1 голос
/ 30 марта 2012

Вложенные именованные функции практически бесполезны именно по этой причине.

Вы должны либо переместить вложенную функцию, либо выполнить явную проверку function_exists.

Вы можете рассмотреть возможность использования анонимная функция в PHP 5.3 или выше.

...