parent
d39bd7fdbd
commit
59ef088571
2 changed files with 194 additions and 0 deletions
@ -0,0 +1,129 @@ |
|||||||
|
--TEST-- |
||||||
|
class_uses reads TypePHP trait metadata and falls back to dynamic PHP classes |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
namespace StaticMetadata { |
||||||
|
|
||||||
|
trait LeafTrait |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
trait OuterTrait |
||||||
|
{ |
||||||
|
use LeafTrait; |
||||||
|
} |
||||||
|
|
||||||
|
class CompiledClass |
||||||
|
{ |
||||||
|
use OuterTrait; |
||||||
|
} |
||||||
|
|
||||||
|
/** @return array<string, string> */ |
||||||
|
function classUsesRecursive(string $class): array |
||||||
|
{ |
||||||
|
$result = []; |
||||||
|
foreach (class_uses($class) as $trait) { |
||||||
|
$result[$trait] = $trait; |
||||||
|
foreach (classUsesRecursive($trait) as $nested) { |
||||||
|
$result[$nested] = $nested; |
||||||
|
} |
||||||
|
} |
||||||
|
return $result; |
||||||
|
} |
||||||
|
|
||||||
|
function namedTarget(): string |
||||||
|
{ |
||||||
|
echo "target\n"; |
||||||
|
return CompiledClass::class; |
||||||
|
} |
||||||
|
|
||||||
|
function namedAutoload(): bool |
||||||
|
{ |
||||||
|
echo "autoload\n"; |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace { |
||||||
|
function main(): void |
||||||
|
{ |
||||||
|
var_dump(array_keys(class_uses(StaticMetadata\CompiledClass::class))); |
||||||
|
var_dump(array_keys(class_uses('\\StaticMetadata\\CompiledClass'))); |
||||||
|
var_dump(array_keys(class_uses(new StaticMetadata\CompiledClass()))); |
||||||
|
var_dump(array_keys(class_uses(StaticMetadata\OuterTrait::class))); |
||||||
|
var_dump(array_keys(class_uses('\\staticmetadata\\outertrait'))); |
||||||
|
var_dump(array_keys(class_uses(StaticMetadata\LeafTrait::class))); |
||||||
|
var_dump(array_keys(StaticMetadata\classUsesRecursive(StaticMetadata\CompiledClass::class))); |
||||||
|
|
||||||
|
class_alias(StaticMetadata\CompiledClass::class, 'StaticMetadata\\CompiledAlias'); |
||||||
|
var_dump(array_keys(class_uses('StaticMetadata\\CompiledAlias'))); |
||||||
|
|
||||||
|
var_dump(array_keys(class_uses( |
||||||
|
autoload: StaticMetadata\namedAutoload(), |
||||||
|
object_or_class: StaticMetadata\namedTarget(), |
||||||
|
))); |
||||||
|
|
||||||
|
eval(<<<'PHP' |
||||||
|
namespace DynamicMetadata; |
||||||
|
trait RuntimeTrait {} |
||||||
|
class RuntimeClass { use RuntimeTrait; } |
||||||
|
function inspect(string $class): array { return class_uses($class); } |
||||||
|
PHP); |
||||||
|
var_dump(array_keys(class_uses('DynamicMetadata\\RuntimeClass'))); |
||||||
|
var_dump(array_keys(DynamicMetadata\inspect(StaticMetadata\CompiledClass::class))); |
||||||
|
var_dump(array_keys(DynamicMetadata\inspect(StaticMetadata\OuterTrait::class))); |
||||||
|
} |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(24) "StaticMetadata\LeafTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(24) "StaticMetadata\LeafTrait" |
||||||
|
} |
||||||
|
array(0) { |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
[1]=> |
||||||
|
string(24) "StaticMetadata\LeafTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
} |
||||||
|
autoload |
||||||
|
target |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(28) "DynamicMetadata\RuntimeTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(25) "StaticMetadata\OuterTrait" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(24) "StaticMetadata\LeafTrait" |
||||||
|
} |
||||||
Loading…
Reference in new issue