- Implement parseDynamicClassConstFetch method to handle non-name expressions in class constant fetch - Add materializeDynamicClassConstTarget method to properly evaluate dynamic class targets - Modify parseClassConstFetch to delegate dynamic cases to new handler - Remove outdated conditional logic for variable expressions in classpull/16/head
parent
330d7eb655
commit
3d8eb272a6
2 changed files with 78 additions and 4 deletions
@ -0,0 +1,50 @@ |
|||||||
|
--TEST-- |
||||||
|
dynamic class constant fetch and object ::class |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
class DynamicClassConstFirst |
||||||
|
{ |
||||||
|
public const NAME = 'first'; |
||||||
|
} |
||||||
|
|
||||||
|
class DynamicClassConstSecond |
||||||
|
{ |
||||||
|
public const NAME = 'second'; |
||||||
|
} |
||||||
|
|
||||||
|
function pick_class(bool $child): string |
||||||
|
{ |
||||||
|
echo 'pick:', $child ? 'child' : 'base', "\n"; |
||||||
|
return $child ? DynamicClassConstSecond::class : DynamicClassConstFirst::class; |
||||||
|
} |
||||||
|
|
||||||
|
function make_dynamic_object(): object |
||||||
|
{ |
||||||
|
echo "object\n"; |
||||||
|
return new DynamicClassConstSecond(); |
||||||
|
} |
||||||
|
|
||||||
|
function main(): void |
||||||
|
{ |
||||||
|
$class = DynamicClassConstFirst::class; |
||||||
|
var_dump($class::NAME); |
||||||
|
|
||||||
|
var_dump(pick_class(true)::NAME); |
||||||
|
var_dump(pick_class(false)::NAME); |
||||||
|
|
||||||
|
$object = new DynamicClassConstSecond(); |
||||||
|
var_dump($object::NAME); |
||||||
|
|
||||||
|
var_dump(make_dynamic_object()::class); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(5) "first" |
||||||
|
pick:child |
||||||
|
string(6) "second" |
||||||
|
pick:base |
||||||
|
string(5) "first" |
||||||
|
string(6) "second" |
||||||
|
object |
||||||
|
string(23) "DynamicClassConstSecond" |
||||||
Loading…
Reference in new issue