Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Skrocony if a throw
Forum PHP.pl > Forum > Przedszkole
Koldy
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
Pyton_000
  1. if(1==1)
  2. $this->x = 1;
  3. else
  4. throw new Exceptrion();
Koldy
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
Turson
Najwidoczniej się nie da
Pyton_000
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
Tuminure
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.
Koldy
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
Turson
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
viking
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.
Koldy
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
viking
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. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.