It would theoretically be:

     $fn = MyController::myAction(...);

It currently errors:

Fatal error: Uncaught Error: Non-static method MyController::myAction() cannot 
be called statically

I would be okay with allowing this, as long as it's bound before it's called.


One other question regarding the current patch. I have not seen this aspect discussed yet.

From the list in the first proposal section (https://wiki.php.net/rfc/first_class_callable_syntax#proposal), I am focusing this question on the few that are by name (strings).. so:

  strlen(...);
  Foo::method(...);
  $classStr::$methodStr(...);
  self::{$complex . $expression}(...);
  'strlen'(...);
  [Foo::class, 'method'](...);

Do these have to scan the target function and its signature in order to wrap them? In the cases of classes above, this will trigger the autoloader. I wonder if it could create a by-name reference that resolves the signature at just in time / at call time in these situations?

In context, suppose I am suggesting that something like:

    $routes = [
      '/my-action' => MyController::myAction(...),
      '/other-action => [OtherController::class, 'otherAction'](...),
      ...
    ];

would not invoke the autoloader until one of them may be actually used/called.

This would be similar in philosophy as to how Foo::class creates a fully qualified string without confirming a class exists at that name when the scanner and executor sees ::class.

-ralph

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to