[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: мистический характер ошибки
daradal
Доброго времени суток! В надежде найти ответ размещаю свой вопрос именно тут в надежде что профессионалы смогут объяснить причину странного куска программы.

Суть в следующем, есть кусочек кода в файле myclass.php.

class myclass 
{
static function myfunc()
{
print "asdasdasdasdasrwe5345";
}
}


Есть еще кусочек кода в другом фаиле main.php это как бы основной фаил в котором точка входа программы, а именно там есть некий класс в коотором есть вызов куска кода из фаила myclass.php.

try
{
$f = new myclass();

}
catch (Exception $e)
{
echo "404";
}


подключение фаила в момент вызова осуществляет загрузчик loadfunc, который регистрируется с помощью spl_autoload_register(array(self, 'loadfunc'));
Сам загрузчик простой стандартный, по символам почеркивания делает путь и ищет. И если фаил не существует загрузчик кидает throw new Exception('фаил не существует');

Так вот если все так как написано сейчас работает нормально, если фаил отсутсвует исключение ловится в
catch (Exception $e)
{
echo "404";
}


если же заменить $f = new myclass(); на myclass::myfunc() то происходт fatal error исключение бросается, после throw ничего не выполняет, но вместо catch происходит краш...почему? То есть если осуществляется вызов статического класса то исключение не ловится. Если обысно создается объект то все ок.

Всю голову сломал..

ps если catch внутри функции автозагрузки то работает нормально (ну оно и ясно)
Michael
вы забыли предоставить текст ошибки.

_____________
There never was a struggle in the soul of a good man that was not hard
daradal
Michael
Прошу прощения случано нажал когда писал, и опубликовалось раньше времени
AllesKlar
daradal
Так а fatal error какой? Что пишет?

_____________
[продано копирайтерам]
daradal
AllesKlar
Fatal error: Class 'myclass' not found in Z:\home\localhost\www\... on line ХХ

Ну то есть фатал такой как отсутствие файла, то естьк ак будто исключение не срабатывает вообще, но по моим экспериментам он срабатывает, все что после throw не выполняется.. но и до catch не доходит
AllesKlar
daradal
ииии.... либо дебагер запусти, либо, если онного нет, в автолоаде поставь логирование, ну или на худой конец echo $class_file
И будет тебе ясно.

_____________
[продано копирайтерам]
daradal
Так я уже ставил все что мог:) Сейчас мне ясно что никакой причины нет.. такому поведению .. но оно есть :)

Вот код загрузчика

static public function loadmodules($className)
{

throw new Exception('Ошибка');

}



Сейчас он просто выдает сразу исключение.. и на статический вызов ошибка.

Нашел на другом форуме аналогичную проблему, решения нет.
daradal
Судя по всему это какойто php шный глюк. можно ли в некорыстных целях опубликовать ссылку на другой форум с такойже проблемой?
Rumych
Может потому, что когда ты вызываешь $f = new myclass(); автозагрузчик его подключает нормально, но когда myclass::myfunc() экземпляр не создается, поэтому загрузчик не срабатывает, а в коде, код этого класса не подключается, (интерпритатор его не видит)
daradal
Rumych, нет, если фаил существует то все нормально подключается, буть то обычный экземпляр или статический метод, проблема имеет место быть если срабатывает исключение, причем оно именно не ловится, и не ловится в вызывающем коде, внутри автозагрузчика оно ловится.


Еще одно наблюдение если исключение кинуть после подключения файла то оно прекрасно ловится даже на статическом вызове!
glock18
http://stackoverflow.com/questions/1579080...-spl-autoloader

Характерно только для версий ниже 5.3
daradal
glock18 Спасибо.
Я не слишком силен в английском, но там ситуация другая у меня при использовании new Class все нормально отрабатывает... исключения вродде нельзя было раньше кидать из автозагрузки там как раз старая версия обсуждается.

Да эт для старых версий, у меня 5.3.13 (надо было сразу написать чет тормознул..)
и ошибка только на статический вызов, как будто ошибка перебивает эксепшн
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.