On Wed, 27 Nov 2019 at 23:33, David Rodrigues <david.pro...@gmail.com> wrote:
>
> Hi internals,
>
> I am using the register_shutdown_function() inside a class, and then I have
> created a private method to be called during shutdown. I have noted that if
> the method is public it works, but private does not.
>
> This shutdown function should be private,
> to avoid execution at a public scope.

That is one of the reasons Closure::fromCallable was added:
https://www.php.net/manual/en/closure.fromcallable.php

So like: register_shutdown_function(Closure::fromCallable([$this, 'leave' ]));
Or in your example: https://3v4l.org/MSLA4

> spl_autoload_register([ self::class, 'privateMethod' ]); // OK

That is not OK. It might not give an error, but it's a bug if a
private method can be called accidentally, without jumping through the
deliberate hoops to work around private methods.

Claude Pache wrote:
> Another workaround is to use a closure:

Although that works, using Closure::fromCallable() has the benefits of
preserving the parameters and their info.

function foo(int $x) {
}

$fn = Closure::fromCallable('foo');
$reflection = new ReflectionFunction($fn);

foreach ($reflection->getParameters() as $param) {
    echo "Param type is: " . $param->getType();
}
// Output is "Param type is: int"

cheers
Dan
Ack

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

Reply via email to