Im » se demander si cela est possible:__set et concaténation de chaînes
J'ai __set utilisé avec succès() méthode magique pour définir les valeurs des propriétés d'une classe:
class View
{
private $data;
public function __set($key, $value)
{
$this->data[$key] = $value;
}
}
Je suis en mesure à:
$view = new View();
$view->whatever = 1234;
Le problème vient quand je veux concaténer une chaîne par exemple. Il semble que __set() ne soit pas appelé (il n'est pas appelé en fait).
$view = new View();
$view->a_string = 'hello everybody'; //Value is set correctly
$view->a_string.= '<br>Bye bye!'; //Nothing happens...
echo $view->a_string;
Cela affiche "bonjour tout le monde". Je ne suis pas capable d'exécuter __set() dans la seconde affectation. lecture php.net il est dit que:
__set() is run when writing data to inaccessible properties.
Afin a_string existe déjà, __set n'est pas appelé. Ma question est finalement ... comment pourrais-je réaliser cette opération de concaténation?
Note: Ok ... Murphy est venu et m'a donné la réponse dès que je posté ...
La réponse (Comme je l'ai compris), est que PHP ne peut pas décider si a_string est disponible car je n'ai pas défini de méthode __get().
La définition de __get() permet à php de trouver la valeur actuelle de a_string, puis utilise __set() pour concaténer la valeur.
Oui, j'ai vu cela après avoir modifié mon post. –
Je dois avoir laissé tomber ceci juste comme vous l'éditiez. –
Sur une note de côté: retourner NULL plutôt qu'une chaîne vide semble plus approprié. – Wrikken