PHP 5.4.5, aquí. Intento invocar un objeto que está almacenado como miembro de otro objeto. Como esto (muy aproximadamente)Cómo llamar al método __invoke de una variable miembro dentro de una clase
class A {
function __invoke() { ... }
}
class B {
private a = new A();
...
$this->a(); <-- runtime error here
}
Esto produce un error de ejecución, por supuesto, porque no hay un método llamado. Pero si escribo la llamada de esta manera:
($this->a)();
me aparece un error de sintaxis.
Por supuesto, puedo escribir
$this->a->__invoke();
pero que parece intolerablemente feo, y más bien socava el punto de funtores. Me preguntaba si hay una forma mejor (u oficial).
Gracias Igor. De los tres, la asignación a la variable parece ser la más clara, pero ninguno de ellos es muy bueno. ¿Alguien entiende por qué la sintaxis "obvia" $ this-> a() no puede encontrar el método __invoke del miembro? ¿Por qué el acceso de los miembros es fundamentalmente diferente a la sintaxis de variable desnuda? –
Porque es ambiguo. '$ this-> a()' podría ser el método 'a' o el miembro' $ a'. En PHP, esos dos están separados bastante fuertemente (a diferencia de JS, por ejemplo). – igorw
Ah. Eso tiene sentido. Gracias. –