php - 自动加载和自定义错误处理程序

时间:2014-10-07 09:34:49

标签: php error-handling autoload

我已注册了自动加载器(spl_autoload_register)并设置了自定义错误处理程序(set_error_handler)。

接下来我有3个类:Class1,Class2和Class3。 Class2扩展了Class1,但它们的方法getText()不匹配。 (Class1需要类型为Class3的参数)

包括Class1 first和Class2 second给我一个致命错误" Class' Class3'没找到..."。我所期待的是一个严格的警告。 (如果我不包括Class1,那么一切都很好。)

的index.php

<?php
class AutoLoader
{
  public static function run ($className)
  {
    require(__DIR__."/".$className.".php");
  }
}
spl_autoload_register(array('AutoLoader', "run"));

class ErrorHandler
{
  public static function error ($errno, $errstr, $errfile, $errline)
  {
    echo 'error';
  }
}
set_error_handler('ErrorHandler::error');

echo 'a';
require( __DIR__.'\Class1.php' );
echo 'b';
require( __DIR__.'\Class2.php' );
echo 'c';
?>

Class1.php

<?php
class Class1
{
  public static function getText ($text=Class3::TEXT)
  {
  }
}
?>

Class2.php

<?php
class Class2 extends Class1
{
  public static function getText ()
  {
  }
}
?>

Class3.php

<?php
class Class3
{
  const TEXT = "text";
}
?>

使用php 5.3.5我得到了预期的结果:aberrorc

使用php 5.5.6我收到致命错误:abFatal错误......

这里列出了类似的问题set_error_handler function not calling autoloadhttps://bugs.php.net/bug.php?id=54054 (两者都尝试在错误处理函数中自动加载一个类。答案是关于&#34;编译/执行&#34;,说它是&#34;不是错误&#34;。我在对此有疑问,因为它在5.3中工作并且设置不完全相同。)

如何解决此问题而不在我的脚本中排除所有严格警告?

0 个答案:

没有答案