Ejecutar un método cuando se hace referencia a una variable de instancia en una clase de PHP?
-
10-10-2019 - |
Pregunta
¿Es posible ejecutar una función cuando se hace referencia a una variable en una clase php en lugar de simplemente devolver su valor, similar a la capacidad de JavaScript para una variable para contener un método?
class LazyClassTest()
{
protected $_lazyInitializedVar;
public function __construct()
{
/* // How can this call and return runWhenReferrenced() when
// someone refers to it outside of the class:
$class = new LazyClass();
$class->lazy;
// Such that $class->lazy calls $this->runWhenReferrenced each
// time it is referred to via $class->lazy?
*/
$this->lazy = $this->runWhenReferrenced();
}
protected function runWhenReferrenced()
{
if (!$this->_lazyInitializedVar) {
$this->_lazyInitializedVar = 'someValue';
}
return $this->_lazyInitializedVar
}
}
Solución
Esto suena como PHP5.3: lambda / cierres / funciones anónimas
http://php.net/manual/en/functions.anonymous.php :
<?php
$greet = function($name) {
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
?>
Otros consejos
PHP5s magia método __get($key)
y __set($key, $value)
podría ser lo que necesita. Más información acerca de ellos está disponible en el manual PHP .
Usted probablemente está yendo en la dirección equivocada. Normalmente se desea definir una getLazyVar()
captador. Hay una razón por qué la gente siempre hacen propiedades protegidas y getters / setters definidos:. Para que puedan pre o post-procesamiento de los valores