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