Table of contents
Zalety
foreach bez kopiowania
Można użyć
foreach($tablica as &$element) $element=$foo;by modyfikować elementy tablicy.
Uwaga: najlepiej robić unset($element) po takiej pętli, bo zmienna pozostaje referencją do ostatniego obiektu.
__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.
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");Zamieni błędy PHP na wyjątki. Goroąco polecam.
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) {…}
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.
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
