Механизм PHP для подавления сообщений о строгих стандартах - PullRequest
3 голосов
/ 22 ноября 2011

Мы работаем над приложением PHP, разработанным для 5.2, но недавно мы перешли на PHP 5.3.У нас не было времени пройти и исправить все проблемы с переходом на PHP 5.3.В частности, у нас много сообщений:

Объявление Object :: Function должно быть совместимо с таковым для Parent :: function

Мы можем исправить это с течением времени,но это займет несколько недель.Тем временем мы можем установить:

error_reporting = E_ALL & ~E_STRICT

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011

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

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

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

set_error_handler('GOON', E_STRICT);
function GOON($errno, $errstr) {
   if (is_strict_function($errstr)) {
      echo "$errstr\n";
   }
}
function is_strict_function($str) {
   foreach (
      array(
         'xzin::goon'
         //Other functions or methods go here
      )
      as $fnc
   ) { 
      if (strpos($str, $fnc) !== false) {
         return false;
      }
   }
   return true;
}

error_reporting(E_ALL | E_STRICT);

class xzin extends zin {
   function goon($a) {}
}
class tzin extends zin {
   function goon($a) {}
}
class zin {
   function goon() {}
}

Выводит: "Объявление tzin :: goon () должно быть совместимо только с объявлением zin :: goon ()".

0 голосов
/ 22 ноября 2011

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

Предупреждение
Большинство ошибок E_STRICT оцениваются во время компиляции, таким образом, такие ошибкине сообщается в файле, где error_reporting улучшен и включает E_STRICT ошибки (и наоборот).

Если это так, возможно, вы можете отключить E_STRICT ошибки в php.ini, как вы это сделали,

error_reporting = E_ALL & ~E_STRICT

, но затем включить их во время выполнения с помощью error_reporting();

error_reporting(E_ALL|E_STRICT);

Может быть, это пропустит все время компиляции?(Отказ от ответственности: звучит хорошо, но я еще не пробовал.)

Если они не являются ошибками, которые выдают во время компиляции, вы можете сделать наоборот и включить их вphp.ini и отключайте их только с помощью error_reporting() в разделах, которые вы хотите игнорировать, или устанавливая собственный обработчик ошибок с помощью set_error_handler(), который выборочно игнорирует строгие ошибки, возникающие в определенных местах.

...