php call class function by string name

You need to pass the object and method together as an array:

call_user_func(array($Player, 'SayHi'));

See callbacks, specifically:

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

The callback syntax is a little odd in PHP. What you need to do is make an array. The 1st element is the object, and the 2nd is the method.

call_user_func(array($player, 'SayHi'));

You can also do it without call_user_func:

$player->{'SayHi'}();

Or:

$method = 'SayHi';
$player->$method();

I am giving my answer to a different question here ( PHP - Can you assign a member function to a variable? ), because it was marked as duplicate by some stackoverflow radicals, and I cannot give my answer to his question! The mentality of stackoverflow fanatics needs to stop.

btw generally this is anti pattern:

$a = 'Pl';
$b = 'aye';
$c = 'r';

$z = $a . $b . $c;

$myz = new $z();


$d = 'Say';
$e = 'Hi';

$x = $d.$e;
$myz->{$x}()

now spread out all variables across your code. You have become the anti christ.

why? because nobody can read your code any longer. Including yourself.

Better is to have the actual references in your code to the function calls you make. Not hidden in some obscure strings. No, just standard calls to the code, wrapped into a function.

Try to keep it as simple as possible. So a better solution would be this:

$x = function(){
  $player = new Player();
  $player->sayHi();
};


$x();

your IDE will find those references. $myz->{$x}() your IDE will not find and you wont be able to maintain well your code

Tags:

Php