Solución:
__get
, __set
, __call
y __callStatic
se invocan cuando el método o la propiedad son inaccesibles. Tu $bar
es público y por lo tanto no inaccesible.
Consulte la sección sobre sobrecarga de propiedades en el manual:
__set()
se ejecuta al escribir datos en propiedades inaccesibles.__get()
se utiliza para leer datos de propiedades inaccesibles.
Los métodos mágicos no sustituyen a los getters y setters. Solo le permiten manejar llamadas a métodos o acceso a propiedades que de otra manera resultarían en un error. Como tal, hay mucho más relacionado con el manejo de errores. También tenga en cuenta que son considerablemente más lentos que usar getter y setter adecuados o llamadas de método directo.
Recomendaría usar una matriz para almacenar todos los valores a través de __set()
.
class foo {
protected $values = array();
public function __get( $key )
{
return $this->values[ $key ];
}
public function __set( $key, $value )
{
$this->values[ $key ] = $value;
}
}
De esta manera, se asegura de que no pueda acceder a las variables de otra manera (tenga en cuenta que $values
está protegido), para evitar colisiones.
Del manual de PHP:
- __set () se ejecuta al escribir datos en propiedades inaccesibles.
- __get () se utiliza para leer datos de propiedades inaccesibles.
Esto solo se llama en lectura / escritura. inaccesible propiedades. Sin embargo, su propiedad es pública, lo que significa que es accesible. Cambiar el modificador de acceso a protegido resuelve el problema.