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.4.1 - 8.4.8
array(41) { [0]=> string(20) "Dom\AdjacentPosition" [1]=> string(16) "dom\domexception" [2]=> string(18) "Dom\Implementation" [3]=> string(8) "Dom\Node" [4]=> string(17) "Dom\NamespaceInfo" [5]=> string(20) "Dom\DocumentFragment" [6]=> string(12) "Dom\Document" [7]=> string(16) "Dom\HTMLDocument" [8]=> string(15) "Dom\XMLDocument" [9]=> string(12) "Dom\NodeList" [10]=> string(16) "Dom\NamedNodeMap" [11]=> string(19) "Dom\DtdNamedNodeMap" [12]=> string(18) "Dom\HTMLCollection" [13]=> string(17) "Dom\CharacterData" [14]=> string(8) "Dom\Attr" [15]=> string(11) "Dom\Element" [16]=> string(15) "Dom\HTMLElement" [17]=> string(8) "Dom\Text" [18]=> string(11) "Dom\Comment" [19]=> string(16) "Dom\CDATASection" [20]=> string(16) "Dom\DocumentType" [21]=> string(12) "Dom\Notation" [22]=> string(10) "Dom\Entity" [23]=> string(19) "Dom\EntityReference" [24]=> string(25) "Dom\ProcessingInstruction" [25]=> string(9) "Dom\XPath" [26]=> string(13) "Dom\TokenList" [27]=> string(18) "Random\RandomError" [28]=> string(30) "Random\BrokenRandomEngineError" [29]=> string(22) "Random\RandomException" [30]=> string(21) "Random\Engine\Mt19937" [31]=> string(33) "Random\Engine\PcgOneseq128XslRr64" [32]=> string(32) "Random\Engine\Xoshiro256StarStar" [33]=> string(20) "Random\Engine\Secure" [34]=> string(17) "Random\Randomizer" [35]=> string(23) "Random\IntervalBoundary" [36]=> string(10) "Pdo\Sqlite" [37]=> string(13) "BcMath\Number" [38]=> string(18) "SomethingElse\Test" [39]=> string(19) "SomethingElse\Test2" [40]=> string(43) "MyApp\Example\ClassWithTypeHintedProperties" }
Output for 8.3.0 - 8.3.22
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.28
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.32
array(3) { [0]=> string(18) "SomethingElse\Test" [1]=> string(19) "SomethingElse\Test2" [2]=> string(43) "MyApp\Example\ClassWithTypeHintedProperties" }

preferences:
146.17 ms | 414 KiB | 5 Q