Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> return false + opis, Jak zrobic return false + opis bledu?
shimano
post 26.09.2009, 21:20:04
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


Witam.

Zastanawiam sie, jak zrobic, aby funkcja w przypadku bledu zwracala wartosc NULL lub FALSE i jednoczesnie komunikat bledu?

Cos na styl:
  1. function funkcja() {
  2. // kod (..)
  3. if(!$a) {
  4. return (FALSE, "Wystapil blad!");
  5. }
  6. return TRUE;
  7. }
  8.  
  9. $i = funkcja();
  10. if(!$i) {
  11. echo $i;
  12. }
  13. else {
  14. echo "Wszystko w porzadku, dzialam dalej...";
  15. }


Oczywiscie cos takiego nie dziala, ale mysle, ze dobrze obrazuje to co, chce osiagnac.
Go to the top of the page
+Quote Post
#luq
post 26.09.2009, 21:31:06
Post #2





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


W funkcjach zastosuj sobie jeden parametr który będzie referencją na zmienną z teksem komunikatu
  1. function a( $param, &$err ){
  2. if( !$param ){
  3. $err = 'Jakieś info';
  4. return false;
  5. }
  6. else{
  7. return true;
  8. }
  9. }
  10.  
  11. if( !a( false, $errorText ) ){
  12. echo $errorText;
  13. }


Natomiast pisząc obiektowo masz wyjątki od tego.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
krowal
post 26.09.2009, 21:32:43
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


I tak bóg stworzył wyjątki (Exceprions) smile.gif
  1. <?php
  2. function mojaFunkcja($param){
  3. if ($param == 'cos_jest_nie_tak'){
  4. throw new Exception('Wiadomosc bledu');
  5. }
  6. }
  7.  
  8. try{
  9. mojaFunkcja('cos_jest_nie_tak');
  10. }catch(Exception $e){
  11. echo $e->getMessage();
  12. }
  13. ?>


@#luq byłeś pierwszy smile.gif

Ten post edytował krowal 26.09.2009, 21:33:34


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
shimano
post 27.09.2009, 18:10:56
Post #4





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


Hm, no to ciagle nie to, o co mi chodzi... Moze jakies inne sugestie?

Edit:
Jedyne co mi przychodzi do glowy to:

  1. function funkcja() {
  2. global $errstr;
  3. // kod (..)
  4. if(!$a) {
  5. $errstr = "Wystapil blad!";
  6. return false;
  7. }
  8. return TRUE;
  9. }
  10.  
  11. $i = funkcja();
  12. if(!$i) {
  13. echo $errstr;
  14. }
  15. else {
  16. echo "Wszystko w porzadku, dzialam dalej...";
  17. }


Niestety te rozwiazanie nie jest ani zbyt ambitne, ani zbyt dobre, ani nawet najwygodniejsze... Wiec moze jakies pomysly?


Ten post edytował shimano 27.09.2009, 19:54:11
Go to the top of the page
+Quote Post
krowal
post 28.09.2009, 12:58:13
Post #5





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


A czemu nie możesz użyć do tego wyjątków ?

  1. <?php
  2. $globalErrorsArray = array();
  3.  
  4. function mojaFunkcja($param){
  5. if ($param == 'cos_jest_nie_tak'){
  6. throw new Exception('Wiadomosc bledu');
  7. }
  8. }
  9.  
  10. try{
  11. mojaFunkcja('cos_jest_nie_tak');
  12. }catch(Exception $e){
  13. $globalErrorsArray[] = $e->getMessage();
  14. }
  15. ?>


ps. deklarowanie globali w funkcji ? smile.gif bez sensu... btw. deklarowanie globali w ogóle jest bez sensu.


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
#luq
post 28.09.2009, 16:51:32
Post #6





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


@krowal dobrze mówi. Chodź użycie wyjątków w kodzie proceduralnym to takie lekkie mieszanie, nie ma w tym nic złego no ale mieszanie to mieszanie winksmiley.jpg
Jeśli takie rozwiązanie Ci się nie podoba to wrzucaj kolejny parametr który będzie referencją na string (ew. tablicę) błędu (błędów) tak jak to pokazałem. Z globalem nie ma co kombinować bo tak jak wyżej napisano nie ma sensu, jest nie eleganckie i takie prostackie.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
shimano
post 28.09.2009, 18:40:52
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


No ja powiedzialbym nawet, ze mieszanie to bardzo lekko powiedziane. Polecacie wyjatki, a czy sami ich uzywacie w skomplikowanych kodach, gdzie jest wiele warunkow? Poza tym chyba ta funkcja nie zostala stworzona konkretnie do tego, co potrzebuje wiec smialbym nawet stwierdzic, ze na dluzszy czas stosowanie wyjatkow do tego, co chce osiagnac moze byc niebezpieczne.

Tak wiec wyjatki odpadaja. Bynajmniej w takiej formie, w jakiej obecnie PHP je zawiera.

A co do zmiennych globalnych. Pisalem, ze nie jest to dobre wyjscie, ani ladne, ani madre, itp. Ale tez nie jest bardzo bardzo zle, czy smiertelnie niebezpieczne. Zwlaszcza, ze w tym przypadku taka globalna zmienna zawiera tylko string do wyswietlania. Nie ma na niej zadnych innych operacji.

Swoja droga to az dziwne, ze chlopaki z PHP nie wprowadzili do tej pory mozliwosci zwrotu "wartosci" wraz z typem true albo false.

P.S.
Uprzedzajac ewentualna kolejna propozycje...
Poza zmiennymi globalnymi jeszcze moznaby zastosowac zwrot tablicy. Owszem, rozwiazanie lepsze od globali. Ale tak samo srednio wygodne.


Ten post edytował shimano 28.09.2009, 18:44:39
Go to the top of the page
+Quote Post
230005
post 28.09.2009, 19:00:00
Post #8





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

Ostrzeżenie: (0%)
-----


Cytat
Poza tym chyba ta funkcja nie zostala stworzona konkretnie do tego, co potrzebuje


To moim zdaniem źle potrzebujesz winksmiley.jpg.

Cytat
wiec smialbym nawet stwierdzic, ze na dluzszy czas stosowanie wyjatkow do tego, co chce osiagnac moze byc niebezpieczne.


Jakim cudem miałoby to być niebezpieczne? Rzucasz wyjątek - blok kodu zostaje przerwany - skrypt idzie dalej.

Cytat
Swoja droga to az dziwne, ze chlopaki z PHP nie wprowadzili do tej pory mozliwosci zwrotu "wartosci" wraz z typem true albo false.


A znasz jakiś język, w którym coś takiego jest? W sumie to nawet ciężko mi byłoby sobie coś takiego wyobrazić. Tzn. jak według ciebie miałoby to wyglądać? Z resztą kurde - po to są właśnie wyjątki - jak jakiś zostanie wypluty, to albo drukujesz komunikat błędu i przechodzisz dalej, albo w bloku catch drukujesz komunikat błędu i dajesz kod obsługujący taką sytuację...
Go to the top of the page
+Quote Post
krowal
post 28.09.2009, 19:30:45
Post #9





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


Cytat(shimano @ 28.09.2009, 19:40:52 ) *
Swoja droga to az dziwne, ze chlopaki z PHP nie wprowadzili do tej pory mozliwosci zwrotu "wartosci" wraz z typem true albo false.


W ostateczności możesz zrobić tak że funkcja zwraca true albo jakąś wiadomość:
  1. <?php
  2. function test($param){
  3. if ($param){
  4. return true;
  5. }else{
  6. return 'niestety wyskoczyl blad';
  7. }
  8. }
  9.  
  10. $valid = test(false);
  11. if ($valid !== true){ //WAZNE! zwróć uwagę na operator porównania ze sprawdzaniem typów "!== , ==="
  12. echo $valid;
  13. }
  14. ?>

W Twoim przypadku zupełnie wystarczy smile.gif

Ja jednak nadal upieram się przy wyjątkach, i twoje pytanie czy korzysta się z nich w skomplikowanym kodzie = tak korzysta się, chyba w każdym frameworku masz błędy obsługiwane przez wyjątki.
Jeśli będziesz już wiedział jak one działają i jak można je przechwytywać to zobaczysz o co chodzi smile.gif


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 09:01