Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Exception Где виновный.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ytrewq123
Отправлено: 24 Августа, 2016 - 19:16:40
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Здравствуйте!
Вот такой вопросик.
PHP:
скопировать код в буфер обмена
  1. function fun($z,$x)
  2. {
  3.     $c = $z+$x;
  4.     if($c>10){ throw new Exception('...BOLSHE');}
  5.     echo $c.'<br>';
  6. }
  7.  
  8.  
  9. try{
  10.    
  11.     fun(2,4);
  12.     fun(1,4);
  13.     fun(2,1);
  14. }
  15. catch(Exception $o){ echo 'TUT'. $o->getMessage();}
  16.  
  17. //Mnogo koda
  18.  
  19. try{
  20.    
  21.     fun(9,4);
  22.  
  23. }
  24. catch(Exception $o){ echo 'TUT'. $o->getMessage();}
  25.  




Простенький код, всё работает. А у меня вопрос.
Как мне узнать при каком вызове функции это исключение сработало.
То есть вызвана 4 раза, как узнать что 4 плохой. А не 2 или 3.
Здесь ладно видно. Но если у меня между вызовами тонна кода.
Так как можно узнать, где находится виновник.
 
 Top
teddy
Отправлено: 24 Августа, 2016 - 20:26:13
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Как понимать "при каком вызове"? Что именно интересует?
Если количество вызовов - то завести статичную переменную в функции и инкрементить её при каждом вызове и передавать значение через объект который описывает исключение. Так же можно передавать и другие параметры. Как то так

PHP:
скопировать код в буфер обмена
  1. class ArgsCapableException extends Exception
  2. {
  3.     private $args;
  4.    
  5.     public function setArgs(array $args)
  6.     {
  7.         $this->args = $args;
  8.     }
  9.    
  10.     public function getArgs()
  11.     {
  12.         return $this->args;
  13.     }
  14. }
  15.  
  16. function sum($a, $b)
  17. {
  18.     static $callCount = 0;
  19.     ++$callCount;
  20.        
  21.     $sumResult = $a + $b;
  22.    
  23.     if ($sumResult > 10) {
  24.         $exception = new ArgsCapableException('Message...');
  25.         $exception->setArgs(compact('a', 'b', 'callCount'));
  26.         throw $exception;    
  27.     }
  28.        
  29.     return $sumResult;
  30.  
  31. }
  32.  
  33. try {
  34.     $s1 = sum(2,2);
  35.     $s2 = sum(5,6);
  36. } catch (ArgsCapableException $e) {
  37.     var_dump($e->getMessage(), $e->getArgs());
  38. }

(Отредактировано автором: 24 Августа, 2016 - 20:35:59)

 
 Top
armancho7777777 Супермодератор
Отправлено: 24 Августа, 2016 - 23:42:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




teddy, скорее всего интересует строка, в которой произошло исключение.
Если не ошибаюсь, будет второй элемент трассировки:
 
 Top
OrmaJever Модератор
Отправлено: 25 Августа, 2016 - 12:37:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Как уже упомянул armancho7777777, смотрите весь $e->getTrace(), там можно например увидеть какие параметры передавались в функцию, цепочку вызовов и другую полезную инфу.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB