Search code examples
phpidephpstormjetbrains-ide

PHPStorm code completion for magic invoke static methods (Using curly braces syntax) [Pendent]


Using the following code, the code completion works fine!

class FooClass
{
    public function run(){}
}

/**
 * @method static FooClass foo(bool $param1 = false)
 */

class Test
{
    public static function __callStatic($name, $arguments)
    {
        //Implementation code ..
    }
}

//Code completes fine for FooClass methods ..
Test::foo()->run();

But, its possible to IDE (PhpStorm) complete the code using the following php invocation method write style (Curly braces)?

//Code NOT completes fine ..
Test::{"foo"}();

If so, how? Thanks for the help!


Solution

  • PhpStorm doesn't support dynamic fields/methods. For a static tool, it's hard to track which field/method is actually accessed. Let's take a look at a more realistic example.

    function foo($str) {
        //Code NOT completes fine ..
        Test::{$str}()->run();
    }
    

    This is how the dynamic invocation usually looks like. In a real code, $str is typically a combination of an external input (e.g. from a database) and business logic. Both are beyond the possibilities of a static analysis.