|
|
|
| Имеется класс:
class manageClassError{
private $errorsList=array();
private function addError($ex){
$errorsList[]=$ex;
}
public function isError(){
return (bool)(count($this->errorsList));
}
public function getErrorsList(){
return $this->errorsList;
}
public function returnLastError(){
$cErrorsList=count($this->errorsList);
If($cErrorsList==0){
return false;
}else{
return $this->errorsList[$cErrorsList-1];
}
}
}
все методы этого класса обычно у меня содержит каждый класс, но тут я подумал - зачем я постоянно дублирую код и решил вынести его в отдельный класс и "всунуть в классы", но нк тут то было, проблема решилась только прописыванием класса в extends, но это не совсем то что мне нужно...
Подскажите, как можно правильно реализовать то что я хочу. | |
|
|
|
|
|
|
|
для: rap-kasta
(21.08.2008 в 14:53)
| | Если я правильно понял, то в каждом классе, который использует методы этого, можно в кострукторе написать
<?
class foo{
function __construct(){
require_once "/path/to/class/file.php";
$this->errorManager = new manageClassError();
}
function doSomething(){
if($this->errorManager->isError()){
// bla bla
}
}
}
?>
|
но лучше конечно использовать чёткие правила именования классов и механизм __autoload, чтобы исключить строчки типа require_once "/path/to/class/file.php"; | |
|
|
|
|
|
|
|
для: Axxil
(21.08.2008 в 15:10)
| | Нет, я боюсь вы меня поняли не полностью. Я хочу не создать экземпляр класса (это я умею :-) ) а именно сделать так чтобы функции стали "родными" чтоли для создаваемого класса.
Функции isError и иже с ними вызываются скриптом, иоесть всё проходит примерно так:
try{
$class=new someClass();
$class->doSomething();
If($class->isError()){
throw $class->returnLastError();
}
}catch(Exception $ex){
echo $ex;
}
тоесть я просто хочу сделать так чтобы все методы(и переменные) класса manageClassError продублировались в другом классе (someClass) | |
|
|
|
|
|
|
|
для: rap-kasta
(21.08.2008 в 15:17)
| | В данном случае кидать исключения можно непосредственно внутри методов класса someClass
т.е.
<?
try{
$class=new someClass();
$class->doSomething(); // в этом методе в случае ошибок кидаем исключения.
$class->doAnythingElse(); // Здесь опять кидаем исключения
}catch(manageClassError $ex){
echo $ex; // ловим все ошибки произошедшие в блоке try и выводим скопом.
}
?>
|
А ваш класс manageClassError нужно унаследовать от Exception cделав обработчиком исключений.
Тут много кода надо писать. Попробуйте сами разобраться
Отсюда можно начать:
http://habrahabr.ru/blogs/php/30399/ | |
|
|
|
|
|
|
|
для: Axxil
(21.08.2008 в 15:44)
| | ккхм...дело в том что я итак использую свои классы для обработки ошибок, а функции управления ошибок здесь только скапливают исключения и, когда скрипту нужно, говорят ему, была ли ошибка...
Вы меня натолкнули на идею - возвращать в случае ошибк сам эксепшн...хм...надо подумать... | |
|
|
|
|
|
|
|
для: Axxil
(21.08.2008 в 15:44)
| | благодарю вас..вот действительно самые красивые и лёгкие решения всегда лежат на поверхности и часто мы(=люди)(в частности я) их не видим...
в общем всё решилось очень просто-класс мой в трэш - тупо бросаю эксепшены... :))))))
PS...3 года кодинга дают знать своё-по много раз начинаешь придумывать велосипеды... | |
|
|
|
|
|
|
|
для: rap-kasta
(21.08.2008 в 16:00)
| | > 3 года кодинга дают знать своё-по много раз начинаешь придумывать велосипеды...
Это нормально :)
Эти велосипеды в последствии огромную пользу принесут, так как в процессе написания своего решения ты становишься асом в проблеме и потом запросто разбираешь чужие решения.
Другое дело что времени не всегда хватает, поэтому сейчас всё чаще прибегаю к готовым решениям, обрабатывая их, в случае надобности, напильником.
PHP-детство кончилось :) | |
|
|
|