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 :: Вернуть ошибку и false

 PHP.SU

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


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

> Описание: Вернуть ошибку и false
jonston
Отправлено: 04 Мая, 2011 - 20:28:14
Post Id



Посетитель


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


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




Здравствуйте форумчане!Скажите как сделать чтобы функция возвращала $error и false одновременно?Спасибо!
что типа этого:
PHP:
скопировать код в буфер обмена
  1.  
  2. function return_dbl($a = '3')
  3. {
  4.     if($a == '3')
  5.     {
  6.         $error = 'произошла ошибка!';
  7.         return false;
  8.         return $error;        
  9.     }
  10. }
  11.  


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 04 Мая, 2011 - 20:29:36
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




return array('result'=>false, 'error'=>$error);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 04 Мая, 2011 - 20:36:40
Post Id



Посетитель


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


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




EuGen пишет:
return array('result'=>false, 'error'=>$error);

если мне нужно проверить
PHP:
скопировать код в буфер обмена
  1.  
  2. if( ! return_dbl('3')) echo $error;
  3.  

так по моему не прокатит.Или я не прав?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 04 Мая, 2011 - 20:42:35
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Проверяйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $rgResult=return_dbl('3');
  3. if(!$rgResult['result'])
  4. {
  5.    echo($rgResult['error']);
  6. }
  7.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 04 Мая, 2011 - 20:55:15
Post Id



Посетитель


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


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




EuGen пишет:
Проверяйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $rgResult=return_dbl('3');
  3. if(!$rgResult['result'])
  4. {
  5.    echo($rgResult['error']);
  6. }
  7.  

спасибо за ответ!Но все таки в codeigniter как-то можно напрямую получать ошибку и false
я даже не знаю как они это сделали.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 04 Мая, 2011 - 22:21:23
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
OrmaJever Модератор
Отправлено: 04 Мая, 2011 - 22:44:23
Post Id



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


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


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




ну а зачем 2 значения если одно из них булевое?
PHP:
скопировать код в буфер обмена
  1. function return_dbl($a = '3')
  2. {
  3.     $error = false;
  4.     if($a == '3') $error = 'произошла ошибка!';
  5.     return $error;
  6. }
  7.  
  8. if(return_dbl() !== false) echo return_dbl();
  9. // либо так, чтобы не вызывать функцию 2раза
  10. $err = return_dbl();
  11. if($err !== false) echo $err;

(Отредактировано автором: 04 Мая, 2011 - 22:44:52)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
grefon
Отправлено: 05 Мая, 2011 - 03:36:25
Post Id



Частый посетитель


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


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




Так а Вы сделайте $error глобальной переменной и в функции возвращайте только false. Но это только если структура скрипта позволяет.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 05 Мая, 2011 - 08:56:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




grefon пишет:
Так а Вы сделайте $error глобальной переменной

Плохая идея. В идеальном случае нет вообще никаких side-effect (глобальные переменные, неявное изменение параметров функций и т.п.). Очень рекомендую никогда не использовать глобальные переменные.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
OrmaJever Модератор
Отправлено: 05 Мая, 2011 - 10:29:01
Post Id



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


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


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




Ещё тогда вариант передавать переменю по ссылке


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Stierus Супермодератор
Отправлено: 05 Мая, 2011 - 10:36:47
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




используйте исключения что бы передавать сообщения об ошибках. У функции должны быть строго определены параметры и ответы. У одной ф-и может быть лишь 1 тип ответа - булевое значение, массив или строка - не важно, важно , что не в функции не должно быть кейсов, когда отдаются разные типы данных (в одном случае возвращается массив, а если ошибка - то false - это плохо, при ошибке должен происходить throw)
PHP:
скопировать код в буфер обмена
  1. function login(){
  2.    if($error){
  3.       throw new Exception('в логине недопустимые символы');
  4.    }
  5. }
  6.  
  7. //блок, использующий ф-ю:
  8. try{
  9.    $user = login();
  10. }
  11. catch(Exception $exception){
  12.    $message = $exception->getMessage();
  13.    //Сам факт того, что мы тут оказались говорит о ошибке
  14. }


в нормальных системах работает эта схема + исключения разных типов (от exception наследуются AuthException, DbException и тд - что бы можно было разные исключения отлавливать на разных уровнях)

(Отредактировано автором: 05 Мая, 2011 - 10:45:34)

 
My status
 Top
EuGen Администратор
Отправлено: 05 Мая, 2011 - 10:53:50
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




OrmaJever пишет:
Ещё тогда вариант передавать переменю по ссылке

И это тоже side-effect (я это и имел ввиду, говоря о неявных изменениях параметров). Переменные и так давно уже по ссылке передаются, вместо того, чтобы копироваться в локальный стек функции.

Правильнее всего предлагает Stierus, вот только думаю, что не скоро еще автор темы дойдет до прочтения о правильной обработке исключений.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 05 Мая, 2011 - 11:33:37
Post Id



Посетитель


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


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




всем спасибо!Использую первый вариант Евгения!


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 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