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
.
// Čísla
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 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{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.
// 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:
use some\namespace\{ClassA, ClassB, ClassC 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