Dziwactwa PHP

PHP jest dość dziwnym językiem skryptowym. Posiada wiele ułatwień pozwalających pisać pomijając pewne istotne elementy. Spójrzcie np. na poniższy kod PHP.

<?php

function sUm ($a, $b) {
 echo wynik ;
 echo $a + $b;
}

SuM (2, '7pppppp');

Wydaje się, że nie ma prawa on działać. Otóż nic bardziej mylnego. Powyższy kod działa bezproblemowo wyświetlając "wynik9". Z tego wynika że parser:

  • Ignoruje brak cudzysłowów w echo jeśli jest podane tylko jedno słowo
  • Nie zwraca uwagi na wielkość liter użytych w funkcjach. O ile w przypadku wbudowanych funkcji moim zdaniem miałoby to sens, bo po co narzucać programiście metodę zapisywania nazw funkcji i zmiennych, to tutaj jest złe.
  • Nie zwraca uwagi na znaki postawione po liczbie, mimo tego że parser spodziewał się wyłącznie cyfr w celu ich dodania (od biedy można by uznać to za funkcjonalność, ale programista powinien sam pilnować jakiego typu dane przekazuje do zmiennej)
  • Nie zwraca uwagi na brak zamknięcia znacznika PHP.

Osobom znającym PHP wnioski nasuną się same. Przy okazji jest to pierwszy wpis testujący wtyczkę do kolorowania składni.

8 komentarzy do “Dziwactwa PHP

  1. rhino pisze:

    Faktycznie, wymienione przez Ciebie cechy PHP są irytujące. Parser wybacza webmasterowi wiele. Zbyt wiele. Nie podoba mi się to i za to nie lubię tego języka. Ale PHP ma też zalety, miejmy nadzieję, że w wersji 6 ich nie utraci. ;)

    • Przesadzasz :P

      Jeżeli ustawisz odpowiedni error_reporting wtedy te „wybaczanie” znika. Mi osobiście się podoba, że nie trzeba się właśnie babrać w typach zmiennych i rzutowanie jest niejawne.

      Nie ma to jak wymyślać koło po raz drugi. Myślę, że tworzenie takiej funkcji jest po prostu zbędne. Z reszta mamy array_sum() do operacji sumowania na tablicach. Swoją drogą funkcja powinna zwracać wynik, a nie go wyrzucac.

      Z echowaniem jednego słowa bez cudzysłowowa/apostrofu to żadna tajemnica jest, natomiast przy dwóch słowach już trzeba ;)

      Wiesz jak jest koniec pliku to w sumie nie trzeba ?> ale to taki dobry nawyk jest.

      A odnośnie znaków i typów to po prostu rzutowanie niejawne. Także żadna tajemnica.

      • Sobak pisze:

        „Nie ma to jak wymyślać koło po raz drugi. Myślę, że tworzenie takiej funkcji jest po prostu zbędne. Z reszta mamy array_sum() do operacji sumowania na tablicach. Swoją drogą funkcja powinna zwracać wynik, a nie go wyrzucac.”
        Ta funkcja to był tylko przykład ;)

        „Mi osobiście się podoba, że nie trzeba się właśnie babrać w typach zmiennych i rzutowanie jest niejawne.”
        Dlatego właśnie napisałem, że można uznać to też za funkcjonalność, chociaż mi się to nigdy nie przydało.

  2. Co do liczb i następujących po nich znakach, to jest to przydatne. Np. jak podajesz jednostki (nie to, żebym stosował, ale myślę, że jest to jakieś wytłumaczenie…).

  3. Jakoś, u mnie pilnuje, żeby było ?> na końcu kodu PHP, inaczej sypie błędem, ale że to działa:
    echo wynik ;
    mnie naprawdę pierońsko dziwi, bo ja tu nie widzę tekstu, a stałą. Tyle ode mnie,

    Pozdrawiam

    • Sobak pisze:

      Jakiej wersji PHP używasz. Ja sprawdzałem na PHP 5.3.1.

      Z tego co się orientuję, to nie da się wyświetlić niezdefiniowanej stałej. Sprawdź z funkcją defined.

      • PHP 5.2.5 zainstalowane razem z WebServem. A ty masz jakąś paczkę serwerową, czy sam sobie instalowałeś? Bo ja bym chciał mieć 5.3 żeby móc używać goto, bo ostro ułatwia życie. Ale jak to mawiał mój nauczyciel z infy: „Dobry programista tak projektuje swój kod, że nie musi używać żadnych etykiet”.

        • Sobak pisze:

          Też pracowałem na WebServie, ale właśnie z powodu przestarzałych paczek zmieniłem pakiet.

          Teraz mogę zdecydowanie polecić xampp’a. Podstawowe rzeczy można wyklikać w panelu, a pozostałe łatwo zmienić w plikach konfiguracyjnych. Pracuje stabilnie, ma w miarę nowe paczki.

          „Dobry programista tak projektuje swój kod, że nie musi używać żadnych etykiet”.

          Też słyszałem to zdanie a jednak nie miałem nigdy styczności z goto w PHP. Słyszałem tylko, że wprowadzili.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *