Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Skrocony if a throw
Koldy
post 7.11.2014, 02:05:48
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


Witajcie

Pracuje nad pewnym kodem i na razie wyrzucalem sobie exity tam gdzie byly bledy lub cos takiego np:
  1. $this->x = (1-1) ? $x : exit('error');


ale jednak przestalo mi to wystarczac i zreszta predzej czy pozniej i tak bym musial wiec przeszedlem sobie na wyjatki, no i problem w tym ze nie moge uzyc konstrukcji
  1. $this->x = (1-1) ? $x : throw new Exception('err');


gdyz nie poprawna skladnia, wiec obszedlem to w taki sposob, ze stworzylem metode throwException() ktora wyrzuca mi Exceptiona a ja robie tak:
  1. $this->x = (1-1) ? $x : $this->throwException('err');


Dziala tak jak ma dzialac, tyle ze stack jest o poziom wiecej z racji extra metody, ale tu jest moje pytanie, czy jest to poprawne czy nie, dziekuje smile.gif


--------------------
$progress++;
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Pyton_000
post 7.11.2014, 07:11:36
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


  1. if(1==1)
  2. $this->x = 1;
  3. else
  4. throw new Exceptrion();


Ten post edytował Pyton_000 7.11.2014, 07:12:54
Go to the top of the page
+Quote Post
Koldy
post 7.11.2014, 13:53:30
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


Witaj, dzieki za zainteresowanie, ale wiem ze tak mozna, moje pytanie brzmialo czy to co ja zrobilem jest poprawne?

Korzystam ze skroconego ifa bardzo czesto i jest jak dla mnie o wiele lepszy - kod wyglada o wiele lepiej i smuklej niz z pelna konstrukcja
Poza tym to chyba logiczne ze to byl przyklad dokladnie mam takie cos:
  1. $new = (1+1)
  2. ? $a
  3. : ((1+1)
  4. ? $x
  5. : $this->throwException('err');
  6. }

Te ify sa czesto wielo poziomowe i nie chcialbym z nich rezygnowac, gdyz lepiej mi sie je czyta, oraz kod metody jest krotszy,
wiec ponawiam pytanie, czy to jest poprawnie (wiem ze moglbym uzyc pelnej konstrukcji if), czy tez moze nie.

pozdrawiam


--------------------
$progress++;
Go to the top of the page
+Quote Post
Turson
post 7.11.2014, 14:05:02
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Najwidoczniej się nie da
Go to the top of the page
+Quote Post
Pyton_000
post 7.11.2014, 14:15:24
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jeżeli uważasz że to się lepiej czyta to gratuluję.

A czy poprawne? Nie do końca, bo oczekujesz zwrotu z funkcji a tymczasem dostajesz exception
Go to the top of the page
+Quote Post
Tuminure
post 7.11.2014, 14:20:53
Post #6





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

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


Cytat
Dziala tak jak ma dzialac, tyle ze stack jest o poziom wiecej z racji extra metody, ale tu jest moje pytanie, czy jest to poprawne czy nie, dziekuje

Poprawne, jeżeli chodzi o działanie. Bo przecież działa.

Nigdy jednak nie widziałem, by ktoś używał tego operatora, żeby w pełni zastąpić ify i elsy. Podejrzewam, że znaczna większość innych programistów nie będzie chciała się przyzwyczaić do Twojego stylu pisania. Dodatkowo jak sam zauważyłeś, ta składnia jest "upośledzona" ze względu na to, że musisz podawać w niej tylko wyrażenia (http://php.net/expressions).

Cytat
Jeżeli uważasz że to się lepiej czyta to gratuluję.

To, co się lepiej czyta to subiektywna opinia. Choć zgadzam się z tym, że jest to okropnie nieczytelne, to jednak rozumiem, że są osoby, które mogą chcieć tak pisać. To tak jak dyskusja z 2 spacje vs 4 spacje vs taby.

Ten post edytował Tuminure 7.11.2014, 14:22:13
Go to the top of the page
+Quote Post
Koldy
post 7.11.2014, 15:40:48
Post #7





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


Cytat
To, co się lepiej czyta to subiektywna opinia. Choć zgadzam się z tym, że jest to okropnie nieczytelne, to jednak rozumiem, że są osoby, które mogą chcieć tak pisać. To tak jak dyskusja z 2 spacje vs 4 spacje vs taby.

otoz to. (oprocz tego ze okropnie nieczytelne smile.gif)

Rozumiem juz, nie chodzi ze chce, a raczej chcialem zastapic tego wszedzie, ale mam takiego dlugiego ifa z kilkoma elsifami (lol) i wygodnie bylo miec to zapisane w wlasnie taki sposob a na samym koncu mialem exit(),
jak to zmienilem na
  1. if () {
  2. } elseif () {
  3. }


to zrobilo sie po prostu 2x wiecej linijek, wiec stad bylo pytanie czy mozna tak to rozwiazac, jak widac, nie.
Dzieki i pozdrawiam.

edit:
O i jeszcze to: + tej skroconej skladni jest taki, ze jak cos przypisujemy do zmiennej to jednak fajnie to napisac raz
  1. $x = () ? true : false;

niz, klepac to kilka razy:
  1. if () {
  2. $x = 1;
  3. } else {
  4. $x = 0
  5. }


To byly glowne przyczyny, pozdrawiam

Ten post edytował Koldy 7.11.2014, 15:49:00


--------------------
$progress++;
Go to the top of the page
+Quote Post
Turson
post 7.11.2014, 15:45:57
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Po prostu w skróconym ifie, oczekuje się, że podasz konkretną wartosc ktora na podstawie warunku zostanie przypisana, wiec nie mozesz tam wywołać void'a
Go to the top of the page
+Quote Post
viking
post 7.11.2014, 15:47:05
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Wyjątek nie zwraca żadnej wartości więc nawet próba przypisania do $this->x można powiedzieć, zostawiła by ten kod w jakimś nieokreślonym stanie. Chyba w żadnym języku to nie zadziała.


--------------------
Go to the top of the page
+Quote Post
Koldy
post 7.11.2014, 15:52:17
Post #10





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


Cytat(Turson @ 7.11.2014, 15:45:57 ) *
Po prostu w skróconym ifie, oczekuje się, że podasz konkretną wartosc ktora na podstawie warunku zostanie przypisana, wiec nie mozesz tam wywołać void'a

Teoretycznie mozesz, bo dziala - ale wiem juz, jest to zle.

Pozdrawiam


--------------------
$progress++;
Go to the top of the page
+Quote Post
viking
post 7.11.2014, 16:02:50
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Jeśli wziąć pod uwagę kod np

  1. //gdzieś tam $this->x =1
  2.  
  3. try {
  4. $this->x = (1-1) ? $x : throw new Exception('err');
  5. } catch (Exception $e) {
  6. var_dump($this->x);
  7. //co powinno się tu wyświetlić? 1, null, false, coś innego
  8. }


--------------------
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: 14.08.2025 - 05:30