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
.
// Coercive mode
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));
Výstupem bude:
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í:
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.
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:
// 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
.
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í.
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.
Vydáno: 12.5.2016