constant_expressions_classes.phpt 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. --TEST--
  2. Constant scalar expressions with autoloading and classes
  3. --INI--
  4. opcache.enable=1
  5. opcache.enable_cli=1
  6. opcache.optimization_level=-1
  7. --FILE--
  8. <?php
  9. # This test validates that autoloading works for common const expression (AST) use cases
  10. $classlist = [
  11. 'A'=> 'class A { const HW = "this is A"; }',
  12. 'B'=> 'class B extends A { const HW = parent::HW." extended by B"; }',
  13. 'space1\C' => 'namespace space1; class C { const HW = "this is space1\C"; }',
  14. 'D' => 'class D { const HW = \space1\C::HW." extended by D"; }',
  15. 'trE' => 'trait trE { public static function getHW() { return parent::HW; } }',
  16. 'E' => 'class E extends B { use trE; }',
  17. 'F' => 'class F { const XX = "this is F"; }',
  18. 'G' => 'class G extends F { const XX = parent::XX." extended by G"; public static function get_me($x = "got ".self::XX) { return $x; } }',
  19. ];
  20. spl_autoload_register(function ($class) use ($classlist) {
  21. if (isset($classlist[$class])) {
  22. eval($classlist[$class]);
  23. } else {
  24. die("Cannot autoload $class\n");
  25. }
  26. });
  27. printf("B::HW = %s\n", B::HW);
  28. printf("D::HW = %s\n", D::HW);
  29. printf("E::getHW() = %s\n", E::getHW());
  30. printf("G::get_me() = %s\n", G::get_me());
  31. ?>
  32. --EXPECT--
  33. B::HW = this is A extended by B
  34. D::HW = this is space1\C extended by D
  35. E::getHW() = this is A extended by B
  36. G::get_me() = got this is F extended by G