Как отказаться от функции в PHP?

В команде, с которой я работаю, у нас есть старая кодовая база, использующая функции PHP ibase_ * по всему коду для связи с базой данных. Мы создали для него оболочку, которая будет делать что-то еще, помимо простого вызова исходной функции, и я произвел массовый поиск-замену во всем коде, чтобы убедиться, что вместо нее используется оболочка.

Теперь, как нам предотвратить использование функций ibase_ * в будущем?

Желательно, чтобы они оставались доступными, но при использовании они должны выдавать УВЕДОМЛЕНИЕ или ПРЕДУПРЕЖДЕНИЕ.

Предпочтительно решение на чистом PHP (не требующее компиляции специальной версии PHP).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
34
0
33 222
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Сам не проверял, но нашел в закладках: http://wiki.php.net/rfc/e-user-deprecated-warning

Обновлено: Хорошо, это еще не работает - поэтому вместо E_USER_DEPRECATED просто используйте что-то вроде E_USER_NOTICE:

<?php
class Foo
{   
    public function __construct()
    {
        trigger_error('Use Bar instead', E_USER_NOTICE);
    }
}

$foo = new Foo()

Это закончится так:

Notice: Use Bar instead in /home/unexist/projects/ingame/svn/foo.php on line 6

trigger_error ()

function my_deprecated_function() {
    trigger_error("Deprecated function called.", E_USER_NOTICE);
    // do stuff.
}

Это не моя функция, это встроенные в PHP функции ibase_ *, например, ibase_query.

Milan Babuškov 11.10.2008 19:47

Вы можете рассмотреть возможность использования E_USER_DEPRECATED для PHP 5.3.x и более поздних версий.

emont01 05.12.2014 23:28

Если ваши функции являются частью класса, вы можете использовать trigger_error в конструкторе, чтобы предупредить об устаревании.

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

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

Это не моя функция, это встроенные в PHP функции ibase_ *, например, ibase_query.

Milan Babuškov 11.10.2008 19:47
Ответ принят как подходящий

Если я правильно понял, вы хотите вызвать ошибку при использовании встроенной функции PHP? В этом случае взгляните на функцию Функция переопределения.

Спасибо, по ссылке, которую вы разместили, я нашел именно то, что мне нужно, здесь: no.php.net/manual/en/function.override-function.php#50821

Milan Babuškov 11.10.2008 21:15

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

troelskn 11.10.2008 21:31

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

troelskn 19.10.2008 16:25

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

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

Вообще говоря, вы можете пометить метод как устаревший, чтобы предупреждать пользователей о коде, который не будет работать в будущих версиях. Я думаю, что лучший способ - использовать trigger_error вместе с некоторым phpdoc.

/**
 * @deprecated
 *
 * @return $this
 */
public function oldMethod()
{
    trigger_error('Method ' . __METHOD__ . ' is deprecated', E_USER_DEPRECATED);

    return $this;
}

@deprecated phpdoc важен, потому что многие IDE, такие как PHPStorm, распознают его и удаляют имя метода, если вы пытаетесь его использовать, поэтому вы замечаете, что он устарел, прежде чем запускать свой код.

Это будет выглядеть примерно так:

jetbrains deprecated strikethrough

Помимо phpdoc вы можете убедиться, что пользователь получит предупреждение, вызвав правильную ошибку во время выполнения. Просто убедитесь, что вы используете правильную константу (например, E_USER_DEPRECATED).

E_DEPRECATED вместо этого используется внутри PHP, поэтому вы должны использовать его нет. Дополнительная информация здесь.

Другие вопросы по теме