Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Включение методов одного класса в другой
 
 автор: rap-kasta   (21.08.2008 в 14:53)   письмо автору
 
 

Имеется класс:

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, но это не совсем то что мне нужно...
Подскажите, как можно правильно реализовать то что я хочу.

  Ответить  
 
 автор: Axxil   (21.08.2008 в 15:10)   письмо автору
 
   для: 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";

  Ответить  
 
 автор: rap-kasta   (21.08.2008 в 15:17)   письмо автору
 
   для: 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)

  Ответить  
 
 автор: Axxil   (21.08.2008 в 15:44)   письмо автору
 
   для: 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/

  Ответить  
 
 автор: rap-kasta   (21.08.2008 в 15:55)   письмо автору
 
   для: Axxil   (21.08.2008 в 15:44)
 

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

Вы меня натолкнули на идею - возвращать в случае ошибк сам эксепшн...хм...надо подумать...

  Ответить  
 
 автор: rap-kasta   (21.08.2008 в 16:00)   письмо автору
 
   для: Axxil   (21.08.2008 в 15:44)
 

благодарю вас..вот действительно самые красивые и лёгкие решения всегда лежат на поверхности и часто мы(=люди)(в частности я) их не видим...
в общем всё решилось очень просто-класс мой в трэш - тупо бросаю эксепшены... :))))))

PS...3 года кодинга дают знать своё-по много раз начинаешь придумывать велосипеды...

  Ответить  
 
 автор: Axxil   (21.08.2008 в 17:33)   письмо автору
 
   для: rap-kasta   (21.08.2008 в 16:00)
 

> 3 года кодинга дают знать своё-по много раз начинаешь придумывать велосипеды...

Это нормально :)
Эти велосипеды в последствии огромную пользу принесут, так как в процессе написания своего решения ты становишься асом в проблеме и потом запросто разбираешь чужие решения.

Другое дело что времени не всегда хватает, поэтому сейчас всё чаще прибегаю к готовым решениям, обрабатывая их, в случае надобности, напильником.

PHP-детство кончилось :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования