3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace SomethingElse; class Test{} class Test2{} namespace MyApp\Example; use ReflectionClass; use ReflectionProperty; use SomethingElse\Test; use SomethingElse\Test2 as Alias; class ClassWithTypeHintedProperties { /** @var Test */ public $test; /** @var Alias */ public $alias; } $c = new ClassWithTypeHintedProperties(); $reflection = new ReflectionClass($c); $declared = get_declared_classes(); $usedWithNamespace = []; foreach ($declared as $class) { if (strstr($class, '\\')) { $usedWithNamespace[] = $class; } } var_dump($usedWithNamespace); foreach($reflection->getProperties(ReflectionProperty::IS_PUBLIC) as $p) { $comment = $p->getDocComment(); $comment = str_replace('/** @var', '', $comment); $comment = str_replace(' */', '', $comment); $comment = trim($comment); foreach ($usedWithNamespace as $class) { if (strstr($comment, $class)) { $comment = $class; echo $class."\n"; } } }
Output for 8.3.0 - 8.3.4, 8.3.6
array(12) { [0]=> string(18) "Random\RandomError" [1]=> string(30) "Random\BrokenRandomEngineError" [2]=> string(22) "Random\RandomException" [3]=> string(21) "Random\Engine\Mt19937" [4]=> string(33) "Random\Engine\PcgOneseq128XslRr64" [5]=> string(32) "Random\Engine\Xoshiro256StarStar" [6]=> string(20) "Random\Engine\Secure" [7]=> string(17) "Random\Randomizer" [8]=> string(23) "Random\IntervalBoundary" [9]=> string(18) "SomethingElse\Test" [10]=> string(19) "SomethingElse\Test2" [11]=> string(43) "MyApp\Example\ClassWithTypeHintedProperties" }
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 array(12) { [0]=> string(18) "Random\RandomError" [1]=> string(30) "Random\BrokenRandomEngineError" [2]=> string(22) "Random\RandomException" [3]=> string(21) "Random\Engine\Mt19937" [4]=> string(33) "Random\Engine\PcgOneseq128XslRr64" [5]=> string(32) "Random\Engine\Xoshiro256StarStar" [6]=> string(20) "Random\Engine\Secure" [7]=> string(17) "Random\Randomizer" [8]=> string(23) "Random\IntervalBoundary" [9]=> string(18) "SomethingElse\Test" [10]=> string(19) "SomethingElse\Test2" [11]=> string(43) "MyApp\Example\ClassWithTypeHintedProperties" }
Output for 8.2.0 - 8.2.18
array(11) { [0]=> string(18) "Random\RandomError" [1]=> string(30) "Random\BrokenRandomEngineError" [2]=> string(22) "Random\RandomException" [3]=> string(21) "Random\Engine\Mt19937" [4]=> string(33) "Random\Engine\PcgOneseq128XslRr64" [5]=> string(32) "Random\Engine\Xoshiro256StarStar" [6]=> string(20) "Random\Engine\Secure" [7]=> string(17) "Random\Randomizer" [8]=> string(18) "SomethingElse\Test" [9]=> string(19) "SomethingElse\Test2" [10]=> string(43) "MyApp\Example\ClassWithTypeHintedProperties" }
Output for 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27
array(3) { [0]=> string(18) "SomethingElse\Test" [1]=> string(19) "SomethingElse\Test2" [2]=> string(43) "MyApp\Example\ClassWithTypeHintedProperties" }

preferences:
139.37 ms | 402 KiB | 156 Q