PHP 7.0, che è l'attuale versione minore al momento della scrittura (2016 -05-16), non supporta questo. Ci sono stati alcuni sforzi in questa direzione (come lo Typed Properties RFC, che è stato rifiutato per PHP 7.1), ma al momento non esiste un supporto diretto.
Nel frattempo, ci sono alcune alternative.
È possibile effettuare una proprietà privata che è accessibile solo attraverso getter e setter che hanno dichiarazioni di tipo:
class Person
{
private $name;
public function getName(): string {
return $this->name;
}
public function setName(string $newName) {
$this->name = $newName;
}
}
si può anche fare una proprietà pubblica e utilizzare un docblock per fornire informazioni sul tipo di persone che leggono il codice e l'utilizzo di un IDE, ma questo non fornisce alcun tipo di runtime-checking:
class Person
{
/**
* @var string
*/
public $name;
}
e in effetti, è possibile combinare getter e setter e un docblock.
Se sei più avventuroso, puoi creare una proprietà contraffatta con lo __get
, __set
, __isset
and __unset
magic methods e controllarne i tipi. Non sono sicuro se lo consiglierei comunque.
Non che io sappia. Tuttavia, in generale * qualsiasi * vincolo sul valore di una proprietà dovrebbe comunque essere fatto attraverso un setter. Dal momento che il setter può facilmente avere un typehint per l'argomento "value", sei a posto. –
Molti framework utilizzano gli attributi _protected_ (principalmente per i controller). Per quei casi in particolare sarebbe molto utile. – CarlosCarucce