Table of contents
PHP5 ma już pare lat i do nowości się nie zalicza. Nowości w PHP6
Instalacja obok PHP4
Można zainstalować jedną, częściej używaną wersję jako moduł Apache, a drugą uruchamiać jako CGI. Istnieje też alternatywne, ciekawe rozwiązanie.
Zalety
__autoload
Nie trzeba w kodzie mieć gąszczu require/include. Wystarczy napisać jedną funkcję __autoload, która zostanie wywołana za każdym razem jak PHP natrafi na niezaładowaną klasę. Żadnego nadmiarowego ładowania.
function __autoload($klasa) {require_once("klasy/$klasa.php");}
Oczywiście trzeba te klasy najpierw mieć :)
foreach bez kopiowania
Można użyć
foreach($tablica as &$element) $element=$foo;
by modyfikować elementy tablicy.
__get/__set/__call
PHP5 pozwala 'złapać' odwołania do nieistniejących pól i metod obiektów. W ten sposób można budować „wirtualne” obiekty, np. mające pola czytane z bazy danych lub po prostu uniknąć pisania setek getCośtam() i setCośtam(). Więcej o setterach/getterach.
Obiekty udające tablice
Można zaimplementować interfejsy tablic w każdym obiekcie i używać go jak zwykłej PHPowej tablicy. Pozwala to zamienić wywołania w stylu $obiekt->get('cos') na $obiekt['cos'] (także używanie obiektów z foreach()!). Więcej o tablicach z SPL.
throw/try/catch
Obsługa wyjątków to jednak fajna sprawa. Na ogół w PHP programuje się pisząc „na słowo honoru”. Skrypt działa póki działa. Jak nie działa to wszystko się sypie, a w najlepszym przypadku któraś funkcja łaskawie zakończy męki przez die(). Zamiast sprawdzać rezultat każdej funkcji można zrobić siatkę bezpieczeństwa:
try {
wyświetl_newsy();
}
catch($e) {
echo 'Sorry, dziś newsów nie będzie';
}
W ten sposób nawet najbardziej zagnieżdżona obskurna mała funkcyjka może wyrzucić wyjątek i umożliwić ładną obsługę błędu, zamiast zapoczątkowywać lawinę kompromitacji.
XML: DOM, XSLT
PHP5 ma te rzeczy wbudowane i działają całkiem nieźle. Jest to sposób tworzenia stron skrajnie różny od echo "<table...." niemniej bardzo ciekawy i potężny.
Poprzednia wersja PHP też mogła korzystać z tych technologii, ale PHP5 ma nowy, znacznie ulepszony interfejs — np. NodeList wykorzystuje wcześniej wspomniany interfejs tablic:
foreach($document->getElementsByTagName('a') as $link) {…}
Obiekty przekazywane przez referencję
Dawniej:
function &foo(&$bar) {$baz = &qux();}
PHP5:
function foo($bar) {$baz = qux();}
O wiele normalniej.
Wywoływanie metod z każdego wystąpienia obiektu
W PHP4 można było tylko wywołać metody zmiennej.
$foo->bar();
W PHP5 można:
Singleton::instance()–>bar();
__construct
Konstruktory już nie muszą mieć określonej nazwy, można na ślepo wywołać konstruktor klasy nadrzędnej. Ot, taka mała, przyjemna rzecz.
E_STRICT
Jeszcze wyższy poziom notice, które czepiają się popularnych hacków i naprowadzają na elegantszy design kodu.
PDO
W PHP5.1 pojawił się nowy, w miarę uniwersalny, interfejs dostępu do baz danych. Obsługuje prepared statements, dzięki czemu jest ciut szybszy, a przede wszystkim można go używać w sposób całkowicie odporny na ataki SQL injection.
BTW: żeby działał driver MySQL najlepiej skompilować PHP z --with-pdo-mysql
Reflection
Zestaw klas, które potrafią podczas działania programu analizować jego strukturę — np. podać, jakie metody ma klasa, jakie parametry przyjmują funkcje, a nawet niektóre komentarze z kodu (tzw. doccoments przy klasach/metodach).
W typowych programach to jest zbędne, ale za to bardzo się przydaje, gdy robi się różne obejścia, kombinacje i sztuczki — np. można zaimplementować swoje własne zdalne wywoływanie procedur (coś jak XML RPC/SOAP), które będzie się orientowało, co funkcje mogą przyjmować, a co nie.
