Reputation: 50298
How would I get something like this to work?
$class_name = 'ClassPeer';
$class_name::doSomething();
Upvotes: 79
Views: 55253
Reputation: 14931
These answers are all outdated:
<?php
class MyTest{
public static function bippo(){
echo "hello";
}
}
$a = MyTest::class;
$a::bippo();
works fine
Upvotes: 18
Reputation: 91
if you need to adjust the namespace
$call = call_user_func(array('\\App\\Models\\'.$class_name, "doSomething"));
Upvotes: 1
Reputation: 7753
After I have almost missed the simplest solution from VolkerK, I have decided to extend and put it in a post. This is how to call the static members on the instance class
// calling class static method
$className = get_class($this);
$result = $className::caluclate($arg1, $arg2);
// using class static member
foreach ($className::$fields as $field) {
:
}
Upvotes: 5
Reputation: 219
To unleash the power of IDE autocomplete and error detection, use this:
$class_name = 'ClassPeer';
$r = new \ReflectionClass($class_name );
// @param ClassPeer $instance
$instance = $r->newInstanceWithoutConstructor();
//$class_name->doSomething();
$instance->doSomething();
Basically here we are calling the static method on an instance of the class.
Upvotes: 21
Reputation: 3344
Reflection (PHP 5 supports it) is how you'd do this. Read that page and you should be able to figure out how to invoke the function like that.
$func = new ReflectionFunction('somefunction');
$func->invoke();
Upvotes: 4
Reputation: 31191
Depending on version of PHP:
call_user_func(array($class_name, 'doSomething'));
call_user_func($class_name .'::doSomething'); // >5.2.3
Upvotes: 96
Reputation: 24452
Use call_user_func
. Also read up on PHP callbacks
.
call_user_func(array($class_name, 'doSomething'), $arguments);
Upvotes: 22