Em qui., 28 de nov. de 2019 às 14:13, Dan Ackroyd <dan...@basereality.com>
escreveu:

> 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


Thanks! It will solve the problem.



>
>
> > 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.
>

In that case, it should be deprecated?



>
> 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
>


-- 
David Rodrigues

Reply via email to