Co nowego w PHP 5.6
PHP w wersji 5.6 jest tuż za rogiem. Sprawdźmy jakie nowości czekają nas w nadchodzącej wersji.
Variadic functions
Funkcje o zmiennej liczbie argumentów (variadic functions) możemy teraz definiować używając operatora „…” (splat operator). Najlepiej pokazać to na przykładzie. Do tej pory, aby móc zdefiniować funkcję o zmiennej liczbie parametrów, trzeba było zrobić coś w stylu:
function checkObjectWithAttributes() {
$args = func_get_args();
$object = array_shift($args);
var_dump($object, $args);
}
checkObjectWithAttributes('object', 'one', 'two', 'three');
W wyniku wywołania otrzymamy:
string(6) "object"
array(3) {
[0]=>
string(3) "one"
[1]=>
string(3) "two"
[2]=>
string(5) "three"
}
Od wersji 5.6 ten sam efekt będzie można uzyskać używając splat operatora:
function checkObjectWithAttributes($object, ...$attributes) {
var_dump($object, $attributes);
}
checkObjectWithAttributes('object', 'one', 'two', 'three');
Wynik wywołania będzie identyczny. Zmienna wpisana za operatorem „…” będzie teraz wyłapywać wszystkie pozostałe argumenty funkcji. Od teraz func_get_args odchodzi do lamusa 🙂
Wypakowywanie argumentów
Poznany przed chwilą splat operator może posłużyć także do rozpakowywania argumentów funkcji. Załóżmy że nasza funkcja przyjmuje 3 parametry. Poniżej przykład w jaki sposób użycie operatora „…” pozwala wypakować tablicę na listę trzech kolejnych parametrów funkcji:
function doMagic($one, $two, $three) {
return $three . $one . $two;
}
$params = ['ala', 'ma', 'kota'];
echo doMagic(...$params);
// można również łączyć sposoby
$params = ['ma', 'kota'];
echo doMagic('ala', ...$params);
Wyrażenia w stałych
Constant scalar expressions – czyli możliwość używania wyrażeń przy definiowaniu stałych. Wyrażenia te możemy teraz stosować zarówno przy definiowaniu stałych jaki i stałych klas oraz wartości domyślnych parametrów. Poniższy przykład nigdy nie zadziała poniżej wersji 5.6:
const A = 1;
const B = A + 1;
class MyShop {
const TAX = 0.21;
const FEE = B * 0.1;
const FACTOR = self::TAX + self::FEE;
public function getPrice($factor = self::TAX + 0.3) {
return 10 * $factor;
}
}
echo MyShop:FACTOR;
echo (new MyShop)->getPrice()."\n";
use const oraz use function
Od teraz operator use będzie wspierał dwie nowe konstrukcje: const oraz function. Pozwolą one zaimportować odpowiednią stałą lub funkcję z innej przestrzeni nazw.
namespace Blog\Post {
const ID = 21;
function comments() { echo __FUNCTION__."\n"; }
}
namespace {
use const Blog\Post\ID;
use function Blog\Post\comments;
echo FOO."\n";
comments();
}
W wyniku uruchomienia nz wersji 5.5 otrzymamy parse error ale w wersji 5.6 otrzymamy
21 Blog\Post\comments
Inne nowości
Jak zawsze ulepszono również szybkość oraz zmniejszono zapotrzebowanie na pamięć. Dodatkowo wprowadzono:
- nowy operator arytmetyczny **oraz =**
- phpdbg – nowy interaktywny debuger
- obsługę plików większych niż 2GB
- dodano nową funkcję kryptograficzną oraz nowy algorytm szyfrowania
Po szczegółową listę zmian odsyłam pod adres http://php.net/manual/en/migration56.new-features.php
Dzisiaj krótko ale treściwie :). Jak zawsze zapraszam do komentowania.
Zdjęcie z wpisu: Flickr na licencji Creative Commons

