I am using the magic __call method in PHP. Sometimes the function I call is a number. For example the class name is example, then sometimes I want to call example::32
Is this possible or should I look at another alternative.
I am using the magic __call method in PHP. Sometimes the function I call is a number. For example the class name is example, then sometimes I want to call example::32
Is this possible or should I look at another alternative.
Sure it's possible. You just need to change the call syntax. $foo->32()
is not valid and will give a fatal error. But $foo->{'32'}()
is valid syntax. Now, you can't define a function 32, but you can use __call to execute it...
class Foo {
public function __call($f, $args) {
echo $f;
}
}
$foo = new Foo;
$foo->32(); //Fatal Error
$foo->{32}(); //Fatal Error
$foo->{'32'}(); // "32" is printed
$x = 32;
$foo->$x(); //Fatal Error
$x = '32';
$foo->$x(); // "32" is printed
$x = 32;
$foo->{(string)$x}(); // "32" is printed
call_user_func(array($foo, '32')); // "32" is printed
Or in 5.3 with static methods, it gets a bit harder:
class Foo {
public static function __callStatic($f, $args) {
echo $f;
}
}
Foo::32(); //Fatal Error
Foo::{32}(); //Fatal Error
Foo::{'32'}(); //Fatal Error
$x = 32;
Foo::$x(); //Fatal Error
$x = '32';
Foo::$x(); // "32" is printed
$x = 32;
Foo::{(string)$x}(); //Fatal Error
call_user_func(array('foo', '32')); //Fatal Error