Функция Redeclare работает на старом сервере, но не на новом - PullRequest
2 голосов
/ 27 марта 2012

Я перевожу приложение PHP 5.2.x на новый сервер 5.2.x.Старый сервер фактически начинал как сервер PHP 4.0 много лет назад и со временем обновлялся до PHP 5.2.Один из наших модулей имеет функцию, которая будет переопределена, если этот модуль используется более одного раза.Мы можем легко это исправить, но мы озадачены тем, как это могло бы сработать.

На новом сервере произойдет сбой с ожидаемым:

Fatal error: Cannot redeclare function

Проблема в том, что нана старом сервере всегда было повторное объявление функции!Есть ли здесь настройка PHP или специальное использование, которое заставляет его работать на одном сервере, но не на другом?

Спасибо!

Редактировать Все еще пытаетесь пролить какэто возможно.Сайт с ФАТАЛЬНЫМИ ошибками, но после этой точки выполнения выполняется.

Ответы [ 2 ]

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

Переопределение функций считается ошибкой.

Может быть, вы, ребята, можете использовать "функцию переименования".

http://es.php.net/manual/en/function.rename-function.php

if(function_exist("foo")){
  rename_function('foo', 'old_foo' );

  function foo(){
        /*...*/
  }
}

Другая идея - переписать код, чтобы сделать это

$foo = function(){  /* something */....  };

Так что в следующий раз, когда вы захотите переопределить $ foo (), вы сделаете

$foo = function(){  /* something else */....  };
0 голосов
/ 22 июня 2012

Я не могу воспроизвести ваше описание, PHP 4 не позволяет переопределить функции:

echo PHP_VERSION;
function foo() {}
function foo() {}

Демо / выход:

4.4.9
Неустранимая ошибка: невозможно переопределить foo () (ранее объявлено в /homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138): код eval (): 2) в / homepages / 26 /d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138): код eval () в строке 3

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

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

...