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 :: Как вернуть код ошибки из функции?

 PHP.SU

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


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

> Без описания
freelsd
Отправлено: 22 Января, 2016 - 08:27:54
Post Id


Гость


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


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




В общем, у меня есть функция, которая возвращает массив, а при неудаче false. Как мне еще возвращать при надобности код ошибки, в случае неудачи функции?

(Отредактировано автором: 22 Января, 2016 - 08:28:36)

 
 Top
Viper
Отправлено: 22 Января, 2016 - 08:58:51
Post Id



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


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


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




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


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
freelsd
Отправлено: 22 Января, 2016 - 09:24:12
Post Id


Гость


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


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




Viper пишет:
Либо в сессию ошибку сохранять в массив и потом выводить, либо сразу возвращать массив.

У меня скрипт без интерфейса, в общем-то. Вы предлагаете в массив добавить поле типа "код ошибки" или как? В Си, например, в функцию можно было указатель на переменную указать, куда, например кода запишется. Такая практика есть в пхп или как ошибки отлавливаются правильнее всего?

(Отредактировано автором: 22 Января, 2016 - 09:54:35)

 
 Top
Viper
Отправлено: 22 Января, 2016 - 15:03:16
Post Id



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


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


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




freelsd пишет:
Такая практика есть в пхп
где есть?
freelsd пишет:
Вы предлагаете в массив добавить поле типа "код ошибки"
именно
freelsd пишет:
как ошибки отлавливаются правильнее всего

кидаются исключения, ловятся. логируются. всё зависит от построения приложения.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
TuX560
Отправлено: 22 Января, 2016 - 15:22:34
Post Id


Гость


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


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




freelsd пишет:
В общем, у меня есть функция, которая возвращает массив, а при неудаче false. Как мне еще возвращать при надобности код ошибки, в случае неудачи функции?

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

И проверяйте результат выполнения не на true/false, а на наличие в возвращаемом архиве полей с ошибками.
 
 Top
freelsd
Отправлено: 22 Января, 2016 - 15:24:11
Post Id


Гость


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


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




Понял, наверное с исключениями и буду работать. Но еще интересно как это раньше решалось, когд исключений в РНР не было?
 
 Top
TuX560
Отправлено: 22 Января, 2016 - 15:27:56
Post Id


Гость


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


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




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

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

Вариантов много и нет одного на все случаи жизни(если мне не изменяет память в автозагрузчике и вовсе по стандарту запрещено кидать исключения)
 
 Top
freelsd
Отправлено: 22 Января, 2016 - 15:41:07
Post Id


Гость


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


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




TuX560 пишет:
freelsd пишет:
В Си, например, в функцию можно было указатель на переменную указать, куда, например кода запишется. Такая практика есть в пхп или как ошибки отлавливаются правильнее всего?

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

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


Хотел бы узнать хотя бы несколько вариантов, если не сложно.
 
 Top
TuX560
Отправлено: 22 Января, 2016 - 15:59:25
Post Id


Гость


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


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




freelsd пишет:
Хотел бы узнать хотя бы несколько вариантов, если не сложно.

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



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




возвращайте не массив, а объект

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. }

(Отредактировано автором: 22 Января, 2016 - 16:02:57)



-----
Just do it
 
 Top
freelsd
Отправлено: 22 Января, 2016 - 21:22:23
Post Id


Гость


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


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




Всем спасибо, все понял.
 
 Top
Зюзя
Отправлено: 25 Января, 2016 - 20:22:16
Post Id


Новичок


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


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




Как раз искал как это сделать. Спасибо за совет.
 
 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