- Код: Выделить всё
<?php
class vpAutoload{
static private $registered;
static private $classes=array(
"vpfield" => "db/vpfields.class.php",
"vpquery" => "db/vpquery.class.php",
"vptable" => "db/vptable.class.php",
"vpschema" => "db/vpschema.class.php",
"vpview" => "core/vpView.class.php",
"vpsystem" => "core/vpSystem.class.php",
"vpapplication" => "core/vpApplication.class.php",
);
static private $usrClass = "/usr/classes/";
static private $sysClass = "/engine/lib/";
static private $classExt = ".class.php";
static private $baseDir;
static public function register($baseDir)
{
if(self::$registered)
{
return;
}
self::$baseDir = $baseDir;
ini_set("unserialize_callback_func", "spl_autoload_call");
if(false===spl_autoload_register(array('vpAutoload','autoload')))
{
throw new Exception("Не удалось запустить автозагрузчик.");
}
self::$registered = true;
}
static public function autoload($className)
{
$class = strtolower($className);
echo "loading class {$className}<br>";
if(key_exists($class, self::$classes))
{
require_once self::$baseDir.self::$sysClass.self::$classes[$class];
}
else
{
echo " Класс {$className} не является системным<br>";
if(file_exists(self::$baseDir.self::$usrClass.$className.self::$classExt))
{
require_once self::$baseDir.self::$usrClass.$className.self::$classExt;
}
else
{
echo " Класс {$className} не является пользовательским.<br>";
throw new Exception(sprintf("Класс %s не найден.", $className));
return FALSE;
}
}
}
}
?>
при попытке создать экземпляр пока несуществующего в системе класса происходит попытка его найти и загрузить. Если класс будет найден как системный или пользовательский то все проходит нормально, если класс не найден то вызывается ИС
- Код: Выделить всё
throw new Exception(sprintf("Класс %s не найден.", $className));
вроде бы все правильно... но вот беда... когда я пытаюсь вызвать static метод несуществующего класса получаю fotal error
при этом выводится вся отладочная информация.
loading class Class1
Класс Class1 не является системным
Класс Class1 не является пользовательским.
Fatal error: Class 'Class1' not found in /srv/www/rcc/web/index.php on line 0
Может кто в курсе как можно отловить эту ИС?
P.S. точнее не отловить а сделать так что бы она не возникала...