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
Форумы портала PHP.SU :: Версия для печати :: Как вернуть код ошибки из функции?
Форумы портала PHP.SU » » Вопросы новичков » Как вернуть код ошибки из функции?

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

1. freelsd - 22 Января, 2016 - 08:27:54 - перейти к сообщению
В общем, у меня есть функция, которая возвращает массив, а при неудаче false. Как мне еще возвращать при надобности код ошибки, в случае неудачи функции?
2. Viper - 22 Января, 2016 - 08:58:51 - перейти к сообщению
Либо в сессию ошибку сохранять в массив и потом выводить, либо сразу возвращать массив.
3. freelsd - 22 Января, 2016 - 09:24:12 - перейти к сообщению
Viper пишет:
Либо в сессию ошибку сохранять в массив и потом выводить, либо сразу возвращать массив.

У меня скрипт без интерфейса, в общем-то. Вы предлагаете в массив добавить поле типа "код ошибки" или как? В Си, например, в функцию можно было указатель на переменную указать, куда, например кода запишется. Такая практика есть в пхп или как ошибки отлавливаются правильнее всего?
4. Viper - 22 Января, 2016 - 15:03:16 - перейти к сообщению
freelsd пишет:
Такая практика есть в пхп
где есть?
freelsd пишет:
Вы предлагаете в массив добавить поле типа "код ошибки"
именно
freelsd пишет:
как ошибки отлавливаются правильнее всего

кидаются исключения, ловятся. логируются. всё зависит от построения приложения.
5. TuX560 - 22 Января, 2016 - 15:22:34 - перейти к сообщению
freelsd пишет:
В общем, у меня есть функция, которая возвращает массив, а при неудаче false. Как мне еще возвращать при надобности код ошибки, в случае неудачи функции?

Возвращайте всегда массив, в случаи неудачи возвращайте что-нибудь подобное:
PHP:
скопировать код в буфер обмена
  1. return array(
  2.     'errno' => код ошибки,
  3.     'error' => 'текст ошибки'
  4. );

И проверяйте результат выполнения не на true/false, а на наличие в возвращаемом архиве полей с ошибками.
6. freelsd - 22 Января, 2016 - 15:24:11 - перейти к сообщению
Понял, наверное с исключениями и буду работать. Но еще интересно как это раньше решалось, когд исключений в РНР не было?
7. TuX560 - 22 Января, 2016 - 15:27:56 - перейти к сообщению
freelsd пишет:
В Си, например, в функцию можно было указатель на переменную указать, куда, например кода запишется. Такая практика есть в пхп или как ошибки отлавливаются правильнее всего?

Можно и так, но если у Вас не будет ошибки то переменную все равно передавать придется, можно хоть тип у возвращаемого значения смотреть и возвращать массив или код ошибки, как было сказано выше, дело ваше, зависит от конкретных ситуаций.
(Добавление)
freelsd пишет:
Понял, наверное с исключениями и буду работать. Но еще интересно как это раньше решалось, когд исключений в РНР не было?

Вариантов много и нет одного на все случаи жизни(если мне не изменяет память в автозагрузчике и вовсе по стандарту запрещено кидать исключения)
8. freelsd - 22 Января, 2016 - 15:41:07 - перейти к сообщению
TuX560 пишет:
freelsd пишет:
В Си, например, в функцию можно было указатель на переменную указать, куда, например кода запишется. Такая практика есть в пхп или как ошибки отлавливаются правильнее всего?

Можно и так, но если у Вас не будет ошибки то переменную все равно передавать придется, можно хоть тип у возвращаемого значения смотреть и возвращать массив или код ошибки, как было сказано выше, дело ваше, зависит от конкретных ситуаций.
(Добавление)
freelsd пишет:
Понял, наверное с исключениями и буду работать. Но еще интересно как это раньше решалось, когд исключений в РНР не было?

Вариантов много и нет одного на все случаи жизни(если мне не изменяет память в автозагрузчике и вовсе по стандарту запрещено кидать исключения)


Хотел бы узнать хотя бы несколько вариантов, если не сложно.
9. TuX560 - 22 Января, 2016 - 15:59:25 - перейти к сообщению
freelsd пишет:
Хотел бы узнать хотя бы несколько вариантов, если не сложно.

Возвращаемые значения, глобальные значения(имхо так делать не хорошо), исключения, поля объектов, сессии
10. Panoptik - 22 Января, 2016 - 16:00:46 - перейти к сообщению
возвращайте не массив, а объект

PHP:
скопировать код в буфер обмена
  1. class DataObject {
  2.     private $data;
  3.     /**
  4.      *  @var bool
  5.      */
  6.     private $result;
  7.    
  8.     /**
  9.      * @var string
  10.      */
  11.     private $reason;
  12.  
  13.     public function __construct($data = null, $result = true,  $reason = '')
  14.     {
  15.            $this->data = $data;
  16.            $this->result = $result;
  17.            $this->reason = $reason;
  18.     }
  19.  
  20.     public function getResult()
  21.     {
  22.            return $this->result;
  23.     }
  24.  
  25.     public function getReason()
  26.     {
  27.            return $this->reason;
  28.     }
  29.  
  30.     public function getData()
  31.     {
  32.            return $this->data;
  33.     }
  34. }
  35.  
  36. // клиентская часть сеттер
  37.  
  38. if($data) {
  39. $dataObject = new DataObject($data);
  40. } else {
  41. $dataObject = new DataObject(null, false, 'Не получилось достать данные');
  42. }
  43.  
  44.  
  45. // клиентская часть геттер
  46.  
  47. if($dataObject->getStatus()) {
  48.     $dataObject->getData();
  49. } else {
  50.     throw new Exception($dataObject->getReason());
  51. }
11. freelsd - 22 Января, 2016 - 21:22:23 - перейти к сообщению
Всем спасибо, все понял.
12. Зюзя - 25 Января, 2016 - 20:22:16 - перейти к сообщению
Как раз искал как это сделать. Спасибо за совет.

 

Powered by ExBB FM 1.0 RC1