Napisany lut-14-2009
“perełki” php
W tym krótkim wpisie chciałbym zaprezentować Wam parę ciekawostek związanych z językiem PHP. Pomimo faktu, iż programuje w nim już dość długi okres czasu, to nadal potrafi mnie czymś zaskoczyć. Zatem zapraszam do lektury.
ciekawostka numer 1
Na pierwszy rzut oka poniższy skrypt nie jest poprawny i wydawać się może, że jedynym wynikiem jego wykonania powinien być komunikat błędu - a tu niespodzianka. ODRADZAM KORZYSTANIE!. Popatrzmy:
echo jestem;
Na wyjściu otrzymujemy:
ciekawostka numer 2
Aby dostać się do konkretnej wartości tablicy asocjacyjnej, należy podawać klucze w apostrofach. Oczywiste, prawda? Można pójść na skróty (co nie jest zalecane).ODRADZAM KORZYSTANIE!. Spójrzmy:
$tab = array('a'=>345,'b'=>34);
echo $tab[a];
Wypisze:
UWAGA!
Obie przedstawione perełki generują błąd E_NOTICE, który przy domyślnych ustawieniach w pliku php.ini nie jest wyświetlany.
ciekawostka numer 3
Instrukcje include i include_once mogą zwracać wartości z plików przez nie załączanych. Skrypt first.php:
echo include 'second.php';
Natomiast second.php:
return 4;
Wynik uruchomienie first.php:
ciekawostka numer 4
Istnieje możliwość dynamicznego dodawania właściwości obiektom klas. Zobaczmy:
class MyClass {
}
$obj = new MyClass();
$obj->a = 4;
$obj->b = 5;
unset($obj->a);
var_dump($obj);
Po wykonaniu:
I to tyle. Mam nadzieje, że chociaż jednej z “perełek/ciekawostek” nie znaliście.

Pierwsze dwie perelki to niechlujstwo, a stosowanie podobnych praktyk jest niebezpieczne.
Jesli po jakims czasie bedziesz chcial dodac stala lub zmienna a czy jestem, to bedziesz mial caly kod do przepisania.
W pierwszym przypadku jestem traktowane jest jako stala (constant).
Tak tak, należy zdecydowanie tego posta traktować z przymrużeniem oka - jako czystą ciekawostką.
Witam, znalazłem Twojego bloga w Google i też chciałbym skrobnąć parę słów komentarza. Co do pierwszych dwóch przykładów, to zgadzam się z przedmówcami, że jest to błąd w sztuce i tak się robić nie powinno. Nie jest to żaden hack IMO, po prostu działanie parsera PHP, który próbuje jak może dobrze zinterpretować kod. ;] Co do trzeciej perełki - ta jest akurat dosyć ciekawa, chyba zrobię sobie jakieś demko, żeby zobaczyć jak to dokładnie działa. A ostatni “hack” z listy nie jest akurat niczym specjalnym - w tym wypadku po prostu jet wywoływana magiczna metoda __set() i tyle. Chyba, że się nie wie nic o magicznych metodach albo nigdy nie programowało się w JavaScripcie, wtedy faktycznie wygląda to zastanawiająco.
Pozdrawiam!
BTW. Ustaw kolor tekstu na blogu na trochę ciemniejszy, bo oczy bolą od tego jasnego szarego. ;]
Drogi autorze, takie hacki są dla bardzo początkujących (nie-)programistów. IMHO, jeśli ktoś widzi to poraz pierwszy powinien się jeszcze dużo nauczyc
Więc jak już pisałem w komentarzu pierwsze dwie ciekawostki - co teraz zaznaczyłem jeszcze wyraźniej w samym poście nie należy stosować.
W pierwszym przypadku parser PHP szuka stałej o nazwie ‘jestem’, a w drugim stałej o nazwie ‘a’. Jeśli takowej nie znajduje wypluwa NOTICE.
Instrukcję include wykorzystuję akurat bardzo często. Jeśli np. w pliku foo.php umieścisz kod <?php return array(’a',’b'); to później tę tablicę możesz przypisać do zmiennej w sposób $arr = include foo.php;
Czwarty przypadek to bynajmniej nie wywołanie funkcji magicznej __set bo w PHP4 też to działa, a jak wiadomo magia narodziła się wraz z 5 wersją PHP. W sumie skoro w PHP nie trzeba deklarować zmiennych to niby dlaczego miałby być obowiązek deklarowania właściwości w klasie ;).