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ý.
Další skvělou novinkou, kterou PHP 8.1 přináší jsou „readonly properties“. Tedy vlastnosti objektu, kterou jsou pevně nastavené v konstruktoru a jsou pouze pro čtení.
Aktuálně u objektu šlo něco podobného vytvořit pomocí magické funkce __get().
Uvedu zde jaké byly možnosti vlastností od PHP 7.0, 7.4, 8.0 až po nové (budoucí) 8.1.
PHP < 7.4
<?php
class Uzivatel {
/** @var string */
public $jmeno = '';
public function __construct(
string $jmeno
) {
$this->jmeno = $jmeno;
}
public function __set($name, $value) {
if ($name === "jmeno") {
throw new \Exception("Vlastnost 'jmeno' je pouze pro čtení");
}
}
}
PHP >= 7.4
V PHP 7.4 bylo možné definovat typ přímo u vlastnosti – už nebyl potřeba dokumentační komentář:
<?php
class Uzivatel {
public string $jmeno = '';
public function __construct(
string $jmeno
) {
$this->jmeno = $jmeno;
}
public function __set($name, $value) {
if ($name === "jmeno") {
throw new \Exception("Vlastnost 'jmeno' je pouze pro čtení");
}
}
}
PHP >= 8.0
V PHP 8.0 je již možnosti definovat vlastnosti přímo v parametrech konstruktoru:
<?php
class Uzivatel {
public function __construct(
public string $jmeno = ''
) {}
public function __set($name, $value) {
if ($name === "jmeno") {
throw new \Exception("Vlastnost 'jmeno' je pouze pro čtení");
}
}
}
PHP >= 8.1
Nakonec v PHP 8.1 lze zápis zkrátit takto:
<?php
class Uzivatel {
public function __construct(
public readonly string $jmeno = ''
) {}
}
Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)