[PHP5] Can only throw objects

FireMaster

Guest
[PHP5] Can only throw objects

Почему если делаешь

PHP:
try
{
      throw objHandler::objException('blah');
}
catch(objException $e)
{
      echo $e->toString();
}
пых выдает Fatal error: Can only throw objects in... ?

Возможно конечно "я не должен этого хотеть" (c) =) Но например у меня ни один объект в ядре не создается напрямую, все они создаются через ядро и хранятся там в массиве, т.о. я обеспечиваю себе уверенность в том, что объект всегда будет только один и я могу им пользоваться из любых других классов без гемора с передачей его в конструкторе и т.д. и т.п. Вообщем помоему было бы логично, если бы можно было "бросать" не только объекты...
 

Long

Новичок
FireMaster, вообще в 5 пхп нет проблем с копирование объектов, так что если ты где-то создал объект, то при обращении к нему именно он и будет использоваться, более того, на сколько я понимаю, и для функции конструктора ты можешь использовать явное указание того, что переменная является объектом твоего класса.
или я не въехал о чем ты?
 

FireMaster

Guest
Long
Наверное не въехал, хотя хз, мож я криво объяснил или еще чего... Я не про копирование объектов, но если говорить об этом, то вот допустим у тя есть 10 классов, которые чего-то там делают, 11-ый класс - обработчик ошибок. Тебе надо, чтобы эти 10 классов пользовались 11-ым, у тебя есть выбор как это реализовать:

1) Передавать ссылку на 11-ый объект в конструкторы тех 10-ти объектов;
2) Создавать в каждом из 10-ти объектов 11-ый объект, соответственно получишь 10 копий 11-го объекта
3) Сделать через синглтон (мой способ, только несколько расширенный чтоли, и подогнанный под мою архитектуру приложения, но смысл тот же что и в паттерне синглтон).
4) Другие варианты...

З.Ы. Вопрос остается в первом посте остается открытым, или скажите мне, что я ньюб и "не должен этого хотеть" =)
 

FireMaster

Guest
Long, наследование пихаем в пункт 4 (Другие варианты) =). Конечно пробовал, но в моем случае синглтон оказался наиболее подходящим решением. Кстати, пока ехал с работы домой, я догнал какие места в моем проекте мне необходимо переписать, чтобы не было надобности бросать исключение через статический метод. Так что тема исчерпана. Спасибо всем, кто ломал голову со мной =)
 

FireMaster

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

PHP:
try 
{ 
      throw new Exception('We screwed up..');
} 
catch(Exception $e) 
{ 
      core::core_extension('error')->error_format(e->getMessage); 
}
 
Сверху