Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] operator trójkowy
Forum PHP.pl > Forum > Przedszkole
Fred1485
Witam,

Czy pisząc kod jestem zobowiązany w pewnych blokach kodu używać zwykłego ifa czy też skróconego czy to zależy tylko ode mnie (wiem może pytanie głupie ale dla mnie skrócony if to coś bardzo przydatnego, kod się wtedy robi dla mnie bardziej czytelny w pewnych momentach) Jak wy to rozpatrujecie u siebie?
olszam
Ja jestem przyzwyczajony do standardowego ifa wiec ogólnie zależy od tego kto jak to woli. W życiu to tylko kilka razy pisałem operatorem trójkowym i szczerze mi się czytelnie piszę w normalnym if-ie.
Kshyhoo
To jest kwestia obycia z takim zapisem. Ja go stosuję, bo jest krótki w zapisie...
Fred1485
Dla mnie tez to jest szybsze i lepsze często haha.gif
viking
Przydaje się szczególnie przy zwracania wartości bezpośrednio do zmiennej:

  1. $test = (warunek)? 'a' : 'b';


Nie ma wtedy dublowania kodu. A tak wedle upodobania.
Pyton_000
Ba nawet w nowszym PHP coś takiego:

Kod
$zmienna = $zmienna ?: 0;
Janusz1200
Jest ok, byle unikać zagnieżdżania, na tym się kiedyś nadebugowałem, że ho!

Jak jest napisane w dokumentacji:

It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious:
Fred1485
A już nie pisząc nowego tematu mając klasę i w niej wiele metod to lepiej napisać więcej mniejszych metod(mniej kodu w każdej z nich i każda do poszczególnych działań się odnosi) czy lepiej napisać kilka większych metod i tam wszystko upchać?
Forti
Metody powinny byc możliwie Male i odpowiadać za jedna pojedyncza rzecz. Wg. Mnie metoda z więcej niż 10-15 linijek musi mieć na prawdę dobry ku temu powod (oczywiscie nie mowie tutaj o np. 20 setterach jakies klasy/encji) a powyżej 20 to już brązem zalatuje tongue.gif
Fred1485
To jeszcze jedno pytanko,

na początku w klasie sobie definiuję zmienne np:

private $page,
etc...

I pytanie jest takie czy każdą zmienną która będzie użyta choć raz w klasie muszę zapisać aby kod był napisany prawidłowo (jak nie napiszę to też oczywiście zadziała wiadomo dlatego chodzi bardziej o ścisłość) np mam prostą metodę:

  1.  
  2. private function createInactiveLink($value) {
  3. /**
  4.   * do poprawy sprawdzenie parametrów
  5.   */
  6. $pattern = '{V}';
  7. $replace = $value;
  8. $this->_inactive_link = str_replace($pattern, $replace, $this->_params['inactive']);
  9. return $this->_inactive_link;


Funkcja przyjmuje dwa parametry oraz zwraca wartość i czy tutaj to poprawnie napisałem czy wystarczy:

  1.  
  2. private function createInactiveLink($value) {
  3. /**
  4.   * do poprawy sprawdzenie parametrów
  5.   */
  6. $pattern = '{V}';
  7. $replace = $value;
  8. $inactive_link = str_replace($pattern, $replace, $this->_params['inactive']);
  9. return $inactive_link;


Nie do końca rozumiem kiedy te zmienne na początku deklarować (tutaj widać w tej metodzie że jakaś wartość jest zwracana i potem nie będzie nigdzie indziej w klasie użyta) Jaka jest zasada bo na pewno jest, przeglądając kody innych programistów widać że często stosują to z drugiego przykładu sad.gif
Turson
Jeżeli nie wykorzystujesz nigdzie pola klasy to nie ma sensu go inicjalizować
Fred1485
Ale w jakim sensie nie wykorzystuje? Tutaj jedynie wykorzystuje zmienne parent i replace w jednej metodzie ale jednak używam. Chodzi ci o to ze jak w innym miejscu nie używam?
Pyton_000
Atrybuty deklaruje się wtedy, gdy chcesz mieć w klasie dostęp do danych. Przykład:
  1. class Test {
  2.  
  3. private $pattern;
  4.  
  5. public function __construct($pattern)
  6. {
  7. $this->pattern = $pattern;
  8. }
  9.  
  10. public function getReplaced($text)
  11. {
  12. return str_replace('Ala', $this->pattern, $text);
  13. }
  14. }
Janusz1200
Cytat(Turson @ 25.04.2015, 18:20:48 ) *
Jeżeli nie wykorzystujesz nigdzie pola klasy to nie ma sensu go inicjalizować


To zdaje się należy do dobrych praktyk (inicjowanie zmiennych choćby nullem) a poza tym przydaje się szczególnie w PHP, gdy ktoś ma przejąć kod i nie wie, co i po co ta zmienna. Z tym, że zmienna musi być oczywiście gdzieś w metodzie użyta, jak nie jest, to po co ją deklarować?


Ale Autorowi chodziło chyba o to, że ni z gruchy ni z pietruchy wprowadza w prywatniej metodzie

Cytat
$this :


Kod
$this->_inactive_link = str_replace($pattern, $replace, $this->_params['inactive']);
return $this->_inactive_link;


zamiast

Kod
$inactive_link = str_replace($pattern, $replace, $this->_params['inactive']);
return $inactive_link;


(czy lepiej - od razu

Kod
return tr_replace($pattern, $replace, $this->_params['inactive']


- po co ta zmienna $inactive_link? )

Otóż takie $this stosowane nieświadomie jest bez sensu i szkodliwe. Świadome zresztą też jest złe. Gdzie enkapsulacja? Gdzie unikanie efektów ubocznych? Ale mi się zdarza smile.gif
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.