Как отменить функцию в PHP?

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

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

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

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

6 ответов


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


trigger_error ()

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

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

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

    return $this;
}

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

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

jetbrains deprecated strikethrough

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

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


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

Edit: хорошо, это еще не работает - поэтому вместо 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 в конструкторе, чтобы предупредить об устаревании.

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

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


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

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