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