spl_autoload_008.phpt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. --TEST--
  2. SPL: spl_autoload() with exceptions
  3. --INI--
  4. include_path=.
  5. --FILE--
  6. <?php
  7. function MyAutoLoad($className)
  8. {
  9. echo __METHOD__ . "($className)\n";
  10. throw new Exception('Bla');
  11. }
  12. class MyAutoLoader
  13. {
  14. static function autoLoad($className)
  15. {
  16. echo __METHOD__ . "($className)\n";
  17. throw new Exception('Bla');
  18. }
  19. function dynaLoad($className)
  20. {
  21. echo __METHOD__ . "($className)\n";
  22. throw new Exception('Bla');
  23. }
  24. }
  25. $obj = new MyAutoLoader;
  26. $funcs = array(
  27. 'MyAutoLoad',
  28. 'MyAutoLoader::autoLoad',
  29. 'MyAutoLoader::dynaLoad',
  30. array('MyAutoLoader', 'autoLoad'),
  31. array('MyAutoLoader', 'dynaLoad'),
  32. array($obj, 'autoLoad'),
  33. array($obj, 'dynaLoad'),
  34. );
  35. foreach($funcs as $idx => $func)
  36. {
  37. echo "====$idx====\n";
  38. var_dump($func);
  39. try {
  40. spl_autoload_register($func);
  41. } catch (TypeError $e) {
  42. echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
  43. var_dump(count(spl_autoload_functions()));
  44. continue;
  45. }
  46. if (count(spl_autoload_functions())) {
  47. echo "registered\n";
  48. try {
  49. var_dump(class_exists("NoExistingTestClass", true));
  50. } catch (Exception $e) {
  51. echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
  52. }
  53. }
  54. spl_autoload_unregister($func);
  55. var_dump(count(spl_autoload_functions()));
  56. }
  57. ?>
  58. --EXPECTF--
  59. ====0====
  60. string(10) "MyAutoLoad"
  61. registered
  62. MyAutoLoad(NoExistingTestClass)
  63. Exception: Bla
  64. int(0)
  65. ====1====
  66. string(22) "MyAutoLoader::autoLoad"
  67. registered
  68. MyAutoLoader::autoLoad(NoExistingTestClass)
  69. Exception: Bla
  70. int(0)
  71. ====2====
  72. string(22) "MyAutoLoader::dynaLoad"
  73. TypeError: spl_autoload_register(): Argument #1 ($callback) must be a valid callback or null, non-static method MyAutoLoader::dynaLoad() cannot be called statically
  74. int(0)
  75. ====3====
  76. array(2) {
  77. [0]=>
  78. string(12) "MyAutoLoader"
  79. [1]=>
  80. string(8) "autoLoad"
  81. }
  82. registered
  83. MyAutoLoader::autoLoad(NoExistingTestClass)
  84. Exception: Bla
  85. int(0)
  86. ====4====
  87. array(2) {
  88. [0]=>
  89. string(12) "MyAutoLoader"
  90. [1]=>
  91. string(8) "dynaLoad"
  92. }
  93. TypeError: spl_autoload_register(): Argument #1 ($callback) must be a valid callback or null, non-static method MyAutoLoader::dynaLoad() cannot be called statically
  94. int(0)
  95. ====5====
  96. array(2) {
  97. [0]=>
  98. object(MyAutoLoader)#%d (0) {
  99. }
  100. [1]=>
  101. string(8) "autoLoad"
  102. }
  103. registered
  104. MyAutoLoader::autoLoad(NoExistingTestClass)
  105. Exception: Bla
  106. int(0)
  107. ====6====
  108. array(2) {
  109. [0]=>
  110. object(MyAutoLoader)#%d (0) {
  111. }
  112. [1]=>
  113. string(8) "dynaLoad"
  114. }
  115. registered
  116. MyAutoLoader::dynaLoad(NoExistingTestClass)
  117. Exception: Bla
  118. int(0)