closure_from_callable_basic.phpt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. --TEST--
  2. Testing Closure::fromCallable() functionality: Basic
  3. --FILE--
  4. <?php
  5. include('closure_from_callable.inc');
  6. echo 'Access public static function';
  7. $fn = Closure::fromCallable(['Foo', 'publicStaticFunction']);
  8. echo $fn(" OK".PHP_EOL);
  9. echo 'Access public static function with different case';
  10. $fn = Closure::fromCallable(['fOo', 'publicStaticfUNCTION']);
  11. echo $fn(" OK".PHP_EOL);
  12. echo 'Access public static function with colon scheme';
  13. $fn = Closure::fromCallable('Foo::publicStaticFunction');
  14. echo $fn(" OK".PHP_EOL);
  15. echo 'Access public instance method of object';
  16. $fn = Closure::fromCallable([new Foo, 'publicInstanceFunc']);
  17. echo $fn(" OK".PHP_EOL);
  18. echo 'Access public instance method of parent object through parent:: ';
  19. $fn = Closure::fromCallable([new Foo, 'publicInstanceFunc']);
  20. echo $fn(" OK".PHP_EOL);
  21. echo 'Function that exists';
  22. $fn = Closure::fromCallable('bar');
  23. echo $fn(" OK".PHP_EOL);
  24. echo 'Function that exists with different spelling';
  25. $fn = Closure::fromCallable('BAR');
  26. echo $fn(" OK".PHP_EOL);
  27. echo 'Closure is already a closure';
  28. $fn = Closure::fromCallable($closure);
  29. echo $fn(" OK".PHP_EOL);
  30. echo 'Class with public invokable';
  31. $fn = Closure::fromCallable(new PublicInvokable);
  32. echo $fn(" OK".PHP_EOL);
  33. echo "Instance return private method as callable";
  34. $foo = new Foo;
  35. $fn = $foo->closePrivateValid();
  36. echo $fn(" OK".PHP_EOL);
  37. echo "Instance return private static method as callable";
  38. $foo = new Foo;
  39. $fn = $foo->closePrivateStatic();
  40. echo $fn(" OK".PHP_EOL);
  41. echo 'Instance return protected static method as callable';
  42. $subFoo = new SubFoo;
  43. $fn = $subFoo->closeProtectedStaticMethod();
  44. echo $fn(" OK".PHP_EOL);
  45. echo 'Subclass closure over parent class protected method';
  46. $subFoo = new SubFoo;
  47. $fn = $subFoo->closeProtectedValid();
  48. echo $fn(" OK".PHP_EOL);
  49. echo 'Subclass closure over parent class static protected method';
  50. $subFoo = new SubFoo;
  51. $fn = $subFoo->closeProtectedStaticMethod();
  52. echo $fn(" OK".PHP_EOL);
  53. echo 'Access public instance method of parent object through "parent::" ';
  54. $subFoo = new SubFoo;
  55. $fn = $subFoo->getParentPublicInstanceMethod();
  56. echo $fn(" OK".PHP_EOL);
  57. echo 'Access public instance method of self object through "self::" ';
  58. $foo = new Foo;
  59. $fn = $foo->getSelfColonPublicInstanceMethod();
  60. echo $fn(" OK".PHP_EOL);
  61. echo 'Access public instance method of parent object through "self::" to parent method';
  62. $foo = new SubFoo;
  63. $fn = $foo->getSelfColonParentPublicInstanceMethod();
  64. echo $fn(" OK".PHP_EOL);
  65. echo 'Access proteced instance method of parent object through "self::" to parent method';
  66. $foo = new SubFoo;
  67. $fn = $foo->getSelfColonParentProtectedInstanceMethod();
  68. echo $fn(" OK".PHP_EOL);
  69. echo 'MagicCall __call instance method ';
  70. $fn = Closure::fromCallable([new MagicCall, 'nonExistentMethod']);
  71. echo $fn(" OK".PHP_EOL);
  72. echo 'MagicCall __callStatic static method ';
  73. $fn = Closure::fromCallable(['MagicCall', 'nonExistentMethod']);
  74. echo $fn(" OK".PHP_EOL);
  75. ?>
  76. ===DONE===
  77. --EXPECT--
  78. Access public static function OK
  79. Access public static function with different case OK
  80. Access public static function with colon scheme OK
  81. Access public instance method of object OK
  82. Access public instance method of parent object through parent:: OK
  83. Function that exists OK
  84. Function that exists with different spelling OK
  85. Closure is already a closure OK
  86. Class with public invokable OK
  87. Instance return private method as callable OK
  88. Instance return private static method as callable OK
  89. Instance return protected static method as callable OK
  90. Subclass closure over parent class protected method OK
  91. Subclass closure over parent class static protected method OK
  92. Access public instance method of parent object through "parent::" OK
  93. Access public instance method of self object through "self::" OK
  94. Access public instance method of parent object through "self::" to parent method OK
  95. Access proteced instance method of parent object through "self::" to parent method OK
  96. MagicCall __call instance method __call,nonExistentMethod, OK
  97. MagicCall __callStatic static method __callStatic,nonExistentMethod, OK
  98. ===DONE===