Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php call class function by string name

Tags:

php

How can I call a normal (not static) class function by its name?

The below gives an error saying param 1 needs to be a valid callback. I don't want the function to be static, I want it to be a normal function, and all the examples I've seen so far had them static.

class Player {     public function SayHi() { print("Hi"); } }  $player = new Player();  call_user_func($Player, 'SayHi'); 
like image 816
user441521 Avatar asked May 24 '13 17:05

user441521


2 Answers

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(); 
like image 87
Rocket Hazmat Avatar answered Oct 15 '22 02:10

Rocket Hazmat


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')); 
like image 39
meagar Avatar answered Oct 15 '22 01:10

meagar