Table of contents
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 najpierw te klasy mieć :)
foreach bez kopiowania
Można użyć
foreach($tablica as &$element) $element=$foo;by modyfikować elementy tablicy.
__call/__callStatic
PHP5 pozwala 'złapać' odwołania do nieistniejących pól i metod obiektów. W ten sposób można budować obiekty z „wirtualnymi” metodami, np. uniknąć pisania setek funkcji getCośtam() i setCośtam(). Więcej o setterach/getterach. W wersji 5.3 to samo działa dla wywołań statycznych (Klasa::metoda())
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ą znośnie. 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.
Ciekawe ile wersji trzeba będzie czekać na funkcja()[$x]…
$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
BTW: żeby działał driver MySQL najlepiej skompilować PHP z --with-pdo-mysql
W PHP5 jest 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.
Reflection
Zestaw klas, które potrafią podczas działania programu analizować jego własną 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.
Lambdy (funkcje anonimowe) i domknięcia (ang. closures)
W 5.3 pojawiły się prawdziwe anonimowe funkcje. Wcześniej było tylko create_function(), które jest tandetnym hackiem przypominającym eval().
Nowe rozwiązanie bardziej przypomina „dorosłe” języki programowania:
usort($tablica, function($a,$b) {return $a-$b;});choć dostęp do zmiennych poza funkcją został udziwaczniony ze względu na inne PHPowe dziwactwa:
$x = 1
$inc = function() use(&$x) {$x++;};
$inc(); // $x==2