Отслеживание использования функций, помеченных как устаревшие - PullRequest
5 голосов
/ 06 января 2010

Следуя этой теме: Как обрабатывать устаревшие функции в библиотеке? Я хочу найти способ отследить все вызовы устаревшей функции, чтобы убедиться, что все их функции будут заменены до удаления функции. , Учитывая следующие методы PHP

/*
   @deprecated - just use getBar()
*/
function getFoo(){
    return getBar();
}

function getBar(){
    return "bar";
}

Я придумал следующий способ сделать это и ищу обратную связь.

function getFoo(){
    try{
        throw new Exception("Deprecated function used"); 
    } catch(Exception $e){
         //Log the Exception with stack trace
         ....
         // return value as normal
         return getBar();
    }
}

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Для внутренних устаревших функций PHP просто добавьте E_STRICT в error_reporting .

Чтобы пользовательские функции вызывали Уведомление или Предупреждение об устаревших функциях, я бы предложил разработчику, который нашел время, чтобы добавить аннотацию @deprecated, которая также вызывает предупреждение E_USER_DEPRECATED , например

function getFoo(){
    trigger_error(__FUNCTION__ . 'is deprecated', E_USER_DEPRECATED );
    return getBar();
}

Я не знаю, может ли какой-либо из доступных инструментов QA автоматически определить, содержит ли код устаревшие вызовы методов. Тем не менее, это ваш лучший выбор.

Вам не нужно беспокоиться об удалении устаревших методов или функций, если вы используете TDD со 100% покрытием кода. Ваши автоматизированные тесты просто не пройдут, и вы будете знать, где искать.

1 голос
/ 06 января 2010

Опора на устаревшую функцию, вызываемую на самом деле, опасна - у вас будет 100% охват кода, чтобы вы ничего не пропустили. Это нормально для медленного поиска всех вызовов устаревших функций и их замены по одному, но недостаточно для полного перехода.

Я думаю File> Search in Files

в вашей IDE - ваш лучший выбор, так как нет хороших инструментов рефакторинга для PHP, о которых я знаю.

Запоздалая мысль : Возможно PhpXRef - это решение.

...