Novinky v PHP 7 (1. díl)

Kdo by neznal PHP, nejrozšířenější skriptovací jazyk používaný pro tvorbu webových stránek. Není divu, že nabídka webhostingu je pro PHP nejvyšší. Tento jazyk je jednoduchý na naučení, ale neznamená to, že je vhodný jen na triviální projekty. PHP nabízí kouzla, díky kterým si jej oblíbili i profesionálové.

PHP 7 je již nějakou dobu venku. Ale až teď se setkaly s experimentální nebo plnou podporou u některých webhosterů. Podívejme se na některé vlastnosti, které nové PHP nabízí.

Novinky v syntaxi

1. deklarace skalárních argumentů

Nyní je možné deklarovat typ parametrů funkce, a to ve skalární podobě. Doposud bylo od PHP 5 možné typově deklarovat parametry pomocí názvu třídy, rozhraní a také bylo podporováno array a callable.

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return 
array_sum($ints);
}

var_dump(sumOfInts(2'3'4.1));

Výstupem bude:

int(9)

Typování skalárních typů funguje ve striktním nebo mírnějším režimu. Pokud není zapnut striktní režim, tak PHP automaticky převede argumenty do požadovaného datového typu. Pokud je zapnut striktní režim, tak argumenty již musí být v požadovaném datovém typu, jinak vám to vyhodí chybu.

Striktní typování zapnete pomocí:

<?php
declare(strict_types=1);

...

Vyberte si u nás PHP webhosting

2. deklarace návratového typu

Podobně jako typová deklarace argumentů nyní funguje v PHP 7 deklarace návratového typu funkce. Stačí požadovaný typ přidat za dvojtečku za deklaraci funkce.

<?php

function arraysSum(array ...$arrays): array
{
    return 
array_map(function(array $array): int {
        return 
array_sum($array);
    }, 
$arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

Narozdíl od javadocovského @return type toto typ doopravdy kontroluje. Nastavení striktního typování funguje stejně jako u deklarace skalárních argumentů pomocí strict_types.

3. Speciální hodnota při NULL

Určitě jste v kódu často ošetřovali, co se má vrátit, když proměnná nabývá hodnoty null nebo pokud není definována (if (isset($var...). PHP 7 přišlo se syntaktickým cukříkem, který může pomoct kód zjednodušit. Sledujte tu parádu:

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

4. Konstanty typu array

V tomto ohledu PHP 7 napravuje to, co bylo v předchozích verzích zakázáno. Vytvoření konstanty typu array zní logicky. Doposud to bylo možné jen uvnitř třídy pomocí deklarace const.

<?php
define
('ZVIRATA', [
    
'pes',
    
'kočka',
    
'vrabec'
]);

echo 
ZVIRATA[1]; // výstupem bude "kočka"
?>

5. anonymní třídy

Když už to už jde v jiných jazycích, proč by to nešlo tady. A nové PHP si s anonymními třídami hravě poradí.

<?php
interface Logger {
    public function 
log(string $msg);
}

class 
Application {
    private 
$logger;

    public function 
getLogger(): Logger {
         return 
$this->logger;
    }

    public function 
setLogger(Logger $logger) {
         
$this->logger $logger;
    }
}

$app = new Application;
$app->setLogger(new class implements Logger {
    public function 
log(string $msg) {
        echo 
$msg;
    }
});

var_dump($app->getLogger());
?>

Ocení to hlavně profíci, kterým to může ušetřit pár řádek kódu. Začátečníkům však doporučuji držet se konvence třídy pojmenovávat.

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

V příštím díle si to osladíme dalšími syntaktickými cukříky a očekávejte probrání pokročilejších vlastností PHP 7.

Číst druhý díl »

Vydáno: 12.5.2016