Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 26 Май, 2012, 03:38:42

Страниц: [1] 2
Печать
Автор Тема: Не бросать искл. при class_exists (spl_autoload_call)  (Прочитано 730 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Абырвалг    ↓ 
15 Июнь, 2010, 11:36:12
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

Есть лоадер, который кидает исключение если класс не был найден.
 
Когда я делаю new 'BL_Class_Not_Found' - исключение бросать нужно (оно и бросается). Но при class_exists('BL_Class_Not_Found') исключение бросать не нужно.
 
Как быть:
1) внутри лоадера бектрейсом смотреть наличие class_exists?
2) оборачивать class_exists try-catch?
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
artoodetoo    ↓ 
15 Июнь, 2010, 12:08:43 , спустя 32 минуты 31 секунду
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

тебе не надо самому вызывать исключение в автолоадере. не найден и ладно. дальше не его забота. а для class_exists указывай необязательный параметр autoload.  
Спустя 47 секунд добавил
проще будь, короче. тогда не будет проблемм.
Записан
Абырвалг    ↓ 
15 Июнь, 2010, 12:19:44 , спустя 11 минут 1 секунду
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

а для class_exists указывай необязательный параметр autoload.
он по умолчанию Ъ, что мне и нужно
 
тебе не надо самому вызывать исключение в автолоадере
да ну... Имхо все логично - попытался загрузить класс, которого нет - бамц тебе искл. Ибо иначе будет просто фаталл: не могу создать инстанцию класса, которого нет (а в фатале я бектрейс не могу получить)
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
artoodetoo    ↓ 
15 Июнь, 2010, 01:06:46 , спустя 47 минут 2 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

да ну... Имхо все логично - попытался загрузить класс, которого нет - бамц тебе искл. Ибо иначе будет просто фаталл: не могу создать инстанцию класса, которого нет (а в фатале я бектрейс не могу получить)

видишь ли, это и в самом деле фатально :)) если нет класса, с которым тебе хочется работать — сушите весла. это не лечится.
 
Записан
artoodetoo    ↓ 
15 Июнь, 2010, 01:18:57 , спустя 12 минут 11 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

но если тебе хочется перехитрить самого себя - используй class_exists(classname, TRUE) и потом, если хочешь, генерируй исключение. вне автолоадера
Записан
Абырвалг    ↓ 
15 Июнь, 2010, 01:20:14 , спустя 1 минуту 17 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

оно понятно, но мне нужен эксепшн а не фатал (хотя бы из-за бектрейса).
 
Короче лана, забейте, проблема высосана из пальца
Спустя 17 секунд добавил
вне лоадера - не хочу
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
artoodetoo    ↓ 
15 Июнь, 2010, 01:25:17 , спустя 5 минут 3 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

это твоё дело.
imho, фатальное это фатальное. пропущенная скобка — это фатально. опечатка в имени класса то же самое.
Записан
Абырвалг    ↓ 
15 Июнь, 2010, 05:26:47 , спустя 4 часа 1 минуту 30 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

бектрейс
 
распечатай мне бектрейс после фатал эррора?
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
master    ↓ 
15 Июнь, 2010, 11:19:21 , спустя 5 часов 52 минуты 34 секунды
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

я кладу по одному классу в файл, и если файл не найден (!is_file()) печатаю бэктрейс
Записан

phpdude    ↓ 
15 Июнь, 2010, 11:22:12 , спустя 2 минуты 51 секунду
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

master, у главрыбы (прости что так называю, но абырвалгом язык не поворачивается назвать, хотя главрыба в моей исторической линии тоже уныло - у меня был сосед в общаге по фамилии Фиш :D, но как грится из двух зол) проблема в том, что автолоад то есть, что он файлы то на ексист то проверят, но! видимо (насоклько я понял) class_exists вызывает тоже автолоад, что в принципе понятно) и у него этот ексепшн вываливается :))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
master    ↓ 
15 Июнь, 2010, 11:37:02 , спустя 14 минут 50 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

phpdude,
честно говоря не пойму зачем такое надо. обычно class_exists используется перед include
if (!class_exists('Foo', true)) include 'Foo.php';
причём принудительно указывается второй параметр, чтобы class_exists не вызывал __autoload. потому что если class_exists (подразумевающий что не все классы могут быть загружены автоматически) будет вызывать __autoload, это рано или поздно приведёт к фаталу.
Записан

kostyl    ↓ 
15 Июнь, 2010, 11:44:17 , спустя 7 минут 15 секунд
НЕ ХУЕТА! ХУЕТА!

занедельный антипаттерн
Группа: Джедаи

Карма: 60
Сообщений: 3526
Сила слова: 1.7

Короче лана, забейте, проблема высосана из пальца
Записан

качество жизни обратно пропорционально количеству лени
phpdude    ↓ 
15 Июнь, 2010, 11:52:31 , спустя 8 минут 14 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20793
Сила слова: 1.66

master, я думаю тут дело не в этом чуток, там ипа расширяемости была идея, хотя может я неправ.
 
ну типа
 
if(class_exists("myclass_extension")) ... $extension->create($this);
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Абырвалг    ↓ 
16 Июнь, 2010, 04:05:42 , спустя 16 часов 13 минут 11 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

проблема в том, что автолоад то есть, что он файлы то на ексист то проверят, но! видимо (насоклько я понял) class_exists вызывает тоже автолоад, что в принципе понятно) и у него этот ексепшн вываливается :))
100% понимание того, че я хотел. При class_exists автолоад нужен, но эксепшен не нужен.
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
kostyl    ↓ 
16 Июнь, 2010, 04:33:35 , спустя 27 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

занедельный антипаттерн
Группа: Джедаи

Карма: 60
Сообщений: 3526
Сила слова: 1.7

Абырвалг, так слови исключение, проблема то... или тебе это кажется не красивым? )
Записан

качество жизни обратно пропорционально количеству лени
Страниц: [1] 2
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, Sinkler, Frozzeg