автозагрузка и пользовательский обработчик ошибок

Я зарегистрировал автозагрузчик (spl_autoload_register) и установил собственный обработчик ошибок (set_error_handler).

Далее у меня есть 3 класса: Class1, Class2 и Class3. Class2 расширяет Class1, но их методы getText () не совпадают. (Class1 ожидает параметр типа Class3)

Включение первого класса Class1 и второго Class2 дает мне фатальную ошибку «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 error …

Подобная проблема описана здесь Функция set_error_handler не вызывает автозагрузку и здесь https://bugs.php.net/bug.php?id=54054
(Оба пытаются автоматически загрузить класс в функции обработчика ошибок. Ответы о «компиляции / выполнении», говоря, что это «не ошибка». Я сомневаюсь в этом, потому что он работает в 5.3, и это не так точно такая же настройка.)

Как я могу исправить эту проблему, не разбирая все строгие предупреждения в моих сценариях?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]