我已注册了自动加载器(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 autoload和https://bugs.php.net/bug.php?id=54054 (两者都尝试在错误处理函数中自动加载一个类。答案是关于&#34;编译/执行&#34;,说它是&#34;不是错误&#34;。我在对此有疑问,因为它在5.3中工作并且设置不完全相同。)
如何解决此问题而不在我的脚本中排除所有严格警告?