Novinky v PHP 7 (2. díl)

V pokračování seriálu o PHP 7 si ukážeme další zajímavou funkcionalitu, které nové PHP nabízí. Přečtěte si o nových očekávaných vlastnostech i bizarnostech, které PHP nyní umožňuje.

« Číst předchozí díl  Číst následující díl »

6. "Spaceship" operátor

Operátor získal své pojmenování zřejmě podle tvaru <=> připomínající vesmírnou loď nebo létající talíř. I jeho funkce je poměrně nevídaná a inovativní. Umí porovnat dvě hodnoty a na základě výsledku vrátit tři stavy.

V případě rovnosti vrátí 0. V případě, že první operand je menší než druhý, vrátí -1. A posledním případem je, že první operand je větší než druhý a vrátí se 1.

<?php
// Čísla
echo <=> 1// 0
echo <=> 2// -1
echo <=> 1// 1

// Floaty
echo 1.5 <=> 1.5// 0
echo 1.5 <=> 2.5// -1
echo 2.5 <=> 1.5// 1
 
// Řetězce
echo "a" <=> "a"// 0
echo "a" <=> "b"// -1
echo "b" <=> "a"// 1
?>

Porovnávat můžete všechny skalární datové typy.

7. Escapování unicode znaků

Pokud znáte unicode (UTF-8) kód určitého znaku, můžete jej do řetězce zapsat novou elegantní formou.

echo "\u{aa}";
echo "\u{0000aa}";
echo "\u{9999}";

8. Filtrování tříd při deserializaci

Při deserializování objektu ze zdroje, ve který nemáme 100% důvěru existuje bezpečnostní riziko, že nám někdo propašuje k vykonání nevvyžádaný kód. Pomocí vylepšené funkce unserialize() můžeme filtrovat povolené třídy.

<?php

// converts all objects into __PHP_Incomplete_Class object
$data unserialize($foo, ["allowed_classes" => false]);

// converts all objects into __PHP_Incomplete_Class object except those of MyClass and MyClass2
$data unserialize($foo, ["allowed_classes" => ["MyClass""MyClass2"]]);

// default behaviour (same as omitting the second argument) that accepts all classes
$data unserialize($foo, ["allowed_classes" => true]);

9. Skupinový use

Znáte tu otravu, když na začátku každého PHP souboru musíte vypisovat use pro desítky tříd, které používáte? Nyní můžete tuto část kódu částečně zkrátit. Na jednom řádku s use můžete importovat několik tříd (nebo funkcí a konstant) z namespace. Funguje to takhle:

<?php

use some\namespace\{ClassAClassBClassC as C};

Pokračování příště

Příští díl bude v této sérii poslední a podíváme se, jaký má nové PHP dopad na výkon oproti předchozím verzím.

« Číst předchozí díl  Číst následující díl »

Vydáno: 21.5.2016