Table of contents

  1. PHP5 (5.3)
    1. Zalety
      1. foreach bez kopiowania
      2. __call/__callStatic
      3. Obiekty udające tablice
      4. throw/try/catch
      5. XML: DOM, XSLT
      6. PDO
      7. Lambdy (funkcje anonimowe) i domknięcia (ang. closures)
    2. Wady

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

Wady

przestrzenie nazw