Как отменить функцию в PHP?
в команде, с которой я работаю, у нас есть старая кодовая база, использующая функции ibase_* PHP по всему коду для связи с базой данных. Мы создали для него оболочку, которая будет делать что-то еще, кроме вызова исходной функции, и я сделал массовый поиск-замену во всем коде, чтобы убедиться, что вместо этого используется оболочка.
теперь, как мы можем предотвратить использование функций ibase_ * в будущем?
предпочтительно, я хотел бы все еще иметь их в наличии, но сделать это бросьте уведомление или предупреждение, когда оно используется.
решение в чистом PHP (не требуется компилировать пользовательскую версию PHP) является предпочтительным.
6 ответов
Если я правильно понимаю, вы хотите вызвать ошибку при использовании встроенной функции PHP? В этом случае, взгляните на Переопределить Функцию
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 именно распознайте его и вычеркните имя метода, если вы попытаетесь его использовать, поэтому вы заметите, что это устарело перед фактическим запуском код.
это будет выглядеть примерно так:
рядом с 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, который просто отправляет электронное письмо, когда скрипт, содержащий устаревшие функции, регистрируется, но если вы действительно хотите его применить, вы может быть, предварительный крюк полностью предотвратит его регистрацию.