POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.
Nově lze použít klíčové slovo „new“ pro inicializaci třídy přímo ve výchozí hodnotě parametru funkce/metody. To opět zjednoduší psaní některých částí kódu.
Nyní bylo potřeba napsat toto (kódy jsou přímo z RFC):
<?php
class Test {
private Logger $logger;
public function __construct(
?Logger $logger = null,
) {
$this->logger = $logger ?? new NullLogger;
}
}
A od PHP 8.1 půjde kód zjednodušit takto:
<?php
class Test {
public function __construct(
private Logger $logger = new NullLogger,
) {}
}
Co je možné?
<?php
// Všechny 3 možnosti jsou povolené:
function test(
$foo = new A,
$bar = new B(1),
$baz = new C(x: 2),
) { }
Co není možné?
<?php
// Není povoleno (vyvolá kompilační chybu):
function test(
$a = new (CLASS_NAME_CONSTANT)(), // dynamický název třídy
$b = new class {}, // anonymní třída
$c = new A(...[]), // argumenty přes "rozbalení" pole
$d = new B($abc),
) { }
Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)