|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
[2016-09-20 05:07 UTC] nihylum at gmail dot com
[2017-02-11 23:16 UTC] nikic@php.net
[2017-02-11 23:16 UTC] nikic@php.net
-Status: Open
+Status: Closed
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 12:00:02 2025 UTC |
Description: ------------ Tested on: - PHP 7.0.8 ( eval.in ) - PHP 7.1.0beta3 via brew (OSX) Whenever you analyze a callable that is defined by an anonymous class the callable name remains to be "class@anonymous" instead of the real callable name. Solution 1: Modify the callable name construction for anonymous classes to this pattern: class@anonymous::<method> Solution 2: Attach a 4th parameter $resolveAnonymous (that defaults maybe to true, or false for backward compatibility). If set to true each anonymous class and closures will be automatically resolved to its object hash enclosed into box brackets as the class name part of the callable name value (the brackets because of pattern isolation from real class names). Solution 3 (my favorite): Solution 1 + 2 combined. Test script: --------------- <?php trait callback { public function __invoke($who) { return 'hello world'; } } class foo { use callback; } $inline = new class { use callback; }; var_dump( is_callable($inline, false, $target), $target, is_callable([$inline, '__invoke'], false, $target), $target, is_callable(new foo, false, $target), $target ); Expected result: ---------------- bool(true) string(15) "class@anonymous" bool(true) string(15) "class@anonymous" bool(true) string(13) "foo::__invoke" Actual result: -------------- Solution 1: bool(true) string(15) "class@anonymous::__invoke" bool(true) string(15) "class@anonymous::__invoke" bool(true) string(13) "foo::__invoke" Solution 2: bool(true) string(15) "[000000003cc480c70000000035210066]::__invoke" bool(true) string(15) "[000000003cc480c70000000035210066]::__invoke" bool(true) string(13) "foo::__invoke"