How can I call a static method from a class if all I have is a string of the class name?

后端 未结 6 1249
自闭症患者
自闭症患者 2020-12-09 01:05

How would I get something like this to work?

$class_name = \'ClassPeer\';
$class_name::doSomething();
相关标签:
6条回答
  • 2020-12-09 01:42

    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();
    

    Documentation Link

    0 讨论(0)
  • 2020-12-09 01:43

    if you need to adjust the namespace

    $call = call_user_func(array('\\App\\Models\\'.$class_name, "doSomething"));
    
    0 讨论(0)
  • 2020-12-09 01:50

    Depending on version of PHP:

    call_user_func(array($class_name, 'doSomething'));
    call_user_func($class_name .'::doSomething'); // >5.2.3
    
    0 讨论(0)
  • 2020-12-09 01:53

    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.

    0 讨论(0)
  • 2020-12-09 01:56

    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) {
      :
    }
    
    0 讨论(0)
  • 2020-12-09 01:58

    Use call_user_func. Also read up on PHP callbacks.

    call_user_func(array($class_name, 'doSomething'), $arguments);
    
    0 讨论(0)
提交回复
热议问题