class_name_as_scalar.phpt 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. --TEST--
  2. class name as scalar from ::class keyword
  3. --FILE--
  4. <?php
  5. namespace Foo\Bar {
  6. class One {
  7. // compile time constants
  8. const A = self::class;
  9. const B = Two::class;
  10. }
  11. class Two extends One {
  12. public static function run() {
  13. var_dump(self::class); // self compile time lookup
  14. var_dump(static::class); // runtime lookup
  15. var_dump(parent::class); // runtime lookup
  16. var_dump(Baz::class); // default compile time lookup
  17. }
  18. }
  19. class Three extends Two {
  20. // compile time static lookups
  21. public static function checkCompileTime(
  22. $one = self::class,
  23. $two = Baz::class,
  24. $three = One::A,
  25. $four = self::B
  26. ) {
  27. var_dump($one, $two, $three, $four);
  28. }
  29. }
  30. echo "In NS\n";
  31. var_dump(Moo::CLASS); // resolve in namespace
  32. }
  33. namespace {
  34. use Bee\Bop as Moo,
  35. Foo\Bar\One;
  36. echo "Top\n";
  37. var_dump(One::class); // resolve from use
  38. var_dump(Boo::class); // resolve in global namespace
  39. var_dump(Moo::CLASS); // resolve from use as
  40. var_dump(\Moo::Class); // resolve fully qualified
  41. $class = One::class; // assign class as scalar to var
  42. $x = new $class; // create new class from original scalar assignment
  43. var_dump($x);
  44. Foo\Bar\Two::run(); // resolve runtime lookups
  45. echo "Parent\n";
  46. Foo\Bar\Three::run(); // resolve runtime lookups with inheritance
  47. echo "Compile Check\n";
  48. Foo\Bar\Three::checkCompileTime();
  49. }
  50. ?>
  51. --EXPECT--
  52. In NS
  53. string(11) "Foo\Bar\Moo"
  54. Top
  55. string(11) "Foo\Bar\One"
  56. string(3) "Boo"
  57. string(7) "Bee\Bop"
  58. string(3) "Moo"
  59. object(Foo\Bar\One)#1 (0) {
  60. }
  61. string(11) "Foo\Bar\Two"
  62. string(11) "Foo\Bar\Two"
  63. string(11) "Foo\Bar\One"
  64. string(11) "Foo\Bar\Baz"
  65. Parent
  66. string(11) "Foo\Bar\Two"
  67. string(13) "Foo\Bar\Three"
  68. string(11) "Foo\Bar\One"
  69. string(11) "Foo\Bar\Baz"
  70. Compile Check
  71. string(13) "Foo\Bar\Three"
  72. string(11) "Foo\Bar\Baz"
  73. string(11) "Foo\Bar\One"
  74. string(11) "Foo\Bar\Two"