Подтвердить что ты не робот

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

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

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

Желательно, чтобы я все еще имел их доступными, но заставляю его бросать ВНИМАНИЕ или ПРЕДУПРЕЖДЕНИЕ, когда он используется.

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

4b9b3361

Ответ 1

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

Ответ 2

trigger_error()

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

Ответ 3

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

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

    return $this;
}

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

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

jetbrains устарел зачеркнуть

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

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

Ответ 4

Я не проверил его самостоятельно, но нашел это в своих закладках: 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

Ответ 5

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

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

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

Ответ 6

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

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