Разыскивание использования функций отмечено для депрекации

После этого потока: Как обработать депрекацию функций в библиотеке? Я хочу найти способ отследить все вызовы к функции устаревшей, таким образом, я могу удостовериться, что получаю их все замененные, прежде чем функция будет удалена. Учитывая следующие методы 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();
    }
}

5
задан Community 23 May 2017 в 12:23
поделиться

2 ответа

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

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

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

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

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

4
ответ дан 14 December 2019 в 19:15
поделиться

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

Я думаю File > Search in Files

in your IDE is your best bet bet, так как нет хороших инструментов рефакторинга для PHP, о которых я знаю.

Afterthought: Может быть PhpXRef - это решение.

1
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: