Jules Jules - 2 months ago 4x
PHP Question

How to call the __invoke method of a member variable inside a class

PHP 5.4.5, here. I'm trying to invoke an object which is stored as a member of some other object. Like this (very roughly)

class A {
function __invoke () { ... }

class B {
private a = new A();
$this->a(); <-- runtime error here

This produces a runtime error, of course, because there's no method called a. But if I write the call like this:


then I get a syntax error.

Of course, I can write


but that seems intolerably ugly, and rather undermines the point of functors. I was just wondering if there is a better (or official) way.


There's three ways:

Directly calling __invoke, which you already mentioned:


By assigning to a variable:

$a = $this->a;

By using call_user_func:


The last one is probably what you are looking for. It has the benefit that it works with any callable.