Je vois que vous avez déjà obtenu votre réponse, mais pour ceux qui cherchent encore.. :
Il suffit de déclarer toutes les variables "en lecture seule" comme étant privées ou protégées et d'utiliser la méthode magique __get() comme ceci :
/**
* This is used to fetch readonly variables, you can not read the registry
* instance reference through here.
*
* @param string $var
* @return bool|string|array
*/
public function __get($var)
{
return ($var != "instance" && isset($this->$var)) ? $this->$var : false;
}
Comme vous pouvez le voir, j'ai également protégé la variable $this->instance car cette méthode permettra aux utilisateurs de lire toutes les variables déclarées. Pour bloquer plusieurs variables, utilisez un tableau avec in_array().
10 votes
Il semble que "readonly" soit un mot clé spécial qui ne peut être utilisé qu'avec des classes compilées en PHP. C'est dommage, car "readonly public" serait un excellent moyen d'éviter d'utiliser __get() et __set().
2 votes
Ceci a été considéré comme un RFC en 2014 ( wiki.php.net/rfc/readonly_properties ), mais il a été retiré après un certain nombre de contestations ( markmail.org/message/7l3ci3sboma2nlzq ). J'aurais aimé voir
readonly
comme mot-clé pour les propriétés, rendrait la vie beaucoup plus facile au lieu de définir constamment des getters ou d'utiliser le modèle Proxy0 votes
Duplicata : Comment implémenter une variable membre en lecture seule en PHP ?
0 votes
Il existe un projet de rfc actuellement (27 juin 2020) pour proposer l'ajout de fonctionnalités en lecture seule à PHP 8.0 : " Il s'agit d'une première ébauche, nous recherchons actuellement des commentaires. " L'adresse électronique de l'auteur est indiquée et je crois que vous pouvez lui envoyer des suggestions par courriel.