Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie o kontrukcję IF
Forum PHP.pl > Forum > PHP
lukasamd
Witam,
ostatnio w poprawkach wydawanych do niektórych skryptów (np. PHP-Fusion) widzę, iż konstrukcja IF typu:
(kod całkowicie przykładowy)

  1. <?php
  2. if ($zmienna == 0) echo 'costam';
  3. ?>


jest zamieniana na:

  1. <?php
  2. if ($zmienna == 0) { echo 'costam'; }
  3. ?>


Jest jakaś różnica w kwestii bezpieczeństwa? Jeżeli tak, na czym ona polega?
Spawnm
w kwestii bezpieczeństwa nie ma, po prostu kod jest czytelniejszy smile.gif
maly_swd
  1. <?php
  2. if ($zmienna == 0) echo 'costam';
  3. echo 'cos innego';
  4. ?>


wyswietli nam 'costam' jesli $zmienna jest rowna 0 i zawsze wyswietli 'cos innego'

  1. <?php
  2. if ($zmienna == 0) { echo 'costam';
  3. echo 'cos innego';}
  4. ?>


wyswietli nam 'costam' i 'cos innego' jesli $zmienna rowna jest 0

{} oznacza blok kodu do ktorego tyczy sie if . Jesli nie ma klamry to if tyczy sie tylko jednej instrukcji, ktora wystepuje po if.
krowal
A ja bym powiedział, że ma coś wspólnego z bezpieczeństwem skryptów smile.gif Może nie takim pozwalającym na hakowanie serwisu, ale bardziej z takim bezpieczeństwem poprawności działania. Mając nawyk dodawania IF z klamrami zamykającymi blok instrukcji (nawet dla jednej linijki), zawsze jest pewność, że później chcąc dodać kolejną linijkę do instrukcji blokowej nie zapomnimy o istniejących już klamrach. A gdy ich nie ma to różnie bywa, czasami w natłoku zadań zapomina się o dodaniu klamerek smile.gif
dr_bonzo
Tak jak pisze @krowal.

I to nie
  1. <?php
  2. if ($zmienna == 0) { echo 'costam'; }
  3. ?>
bo to nic nie zmienia
tylko od razu
  1. <?php
  2. if ($zmienna == 0)
  3. {
  4.    echo 'costam';
  5. }
  6. ?>


i wszystko masz podane jak na tacy, od razu widzisz co i odkad i dokad jest w ifie.

Chcesz dodac kolejna linijke do ifa:
  1. <?php
  2. if ($zmienna == 0)
  3. {
  4.    echo 'costam';
  5.    echo "to ja po prostu dodajesz"
  6. }
  7. ?>



a nie:

  1. <?php
  2. if ($zmienna == 0) echo 'costam';
  3. echo "to ja po prostu dodajesz"
  4. ?>


i preferuje to nad klamra otwierajaca w tej samej linii:
  1. <?php
  2. if ($zmienna == 0) { // bo musisz tutaj na koniec ifa spojrzec zeby sie dowiedziec czy jest jednolinijkowy czy z klamra
  3. // a takto klamre mialbys tutaj i wszystko jasne i proste
  4.    echo 'costam';
  5.    echo "to ja po prostu dodajesz"
  6. ............. //masa kodu
  7. }
  8. ?>
Methestel
No i zaczyna się odwieczna kłótnia między programistami jak należy formatować swój kod smile.gif. Każdy ma swoje nawyki.
Ja na przykład preferuje otwieranie klamerki w tej samej linijce bo denerwuje mnie jak cała linijka wykorzystana jest tylko do jednej klamerki. Kod jest wtedy bardzo "żadki".

Mam w pracy kolegę który nie daje się przekonać do stosowania klamerek jeśli po if wykonuje jedną instrukcje. Jest to dość irytujące i kilka razy było powodem głupich błędów, zwłaszcza jak terminy naglą a zmiany w kodzie wykonać trzeba szybko. Dlatego gorąco polecam stosowanie klamerek dla każdego if-a, for-a, while-a, foreach-a itp.

W razie jakbyś zaczął się nad tym głębiej zastanawiać pomyś sobie jakie problemy lubisz rozwiązywać jako programista:
1) jeśli coś to robie coś tam ale jeśli coś innego to robie coś innego
2) jeśli coś to to robie coś.

Ja wole te drugie dlatego zawsze po if-ie robie klamerkę.
lukasamd
Ja tam w wypadku jednej instrukcji pomijam klamerki, w wypadku większej ilości:

  1. <?php
  2. if(warunek){
  3.   instrukcja 1;
  4.   instrukcja 2;
  5.   instrukcja 3;
  6. }
  7. ?>


EDIT:
Ale dobra, skończmy oftopa bo sie kłótnia rzeczywiście zacznie winksmiley.jpg
Temat do "zaklosetowania".
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.