closure_059.phpt 768 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. --TEST--
  2. Closure 059: Closure type declaration
  3. --FILE--
  4. <?php
  5. class A {
  6. }
  7. class B {
  8. }
  9. $a = new A;
  10. $b = new B;
  11. $f = function (A $a){};
  12. $f($a);
  13. $f->__invoke($a);
  14. call_user_func(array($f,"__invoke"), $a);
  15. try {
  16. $f($b);
  17. } catch (Error $e) {
  18. echo "Exception: " . $e->getMessage() . "\n";
  19. }
  20. try {
  21. $f->__invoke($b);
  22. } catch (Error $e) {
  23. echo "Exception: " . $e->getMessage() . "\n";
  24. }
  25. try {
  26. call_user_func(array($f,"__invoke"), $b);
  27. } catch (Error $e) {
  28. echo "Exception: " . $e->getMessage() . "\n";
  29. }
  30. ?>
  31. --EXPECTF--
  32. Exception: {closure}(): Argument #1 ($a) must be of type A, B given, called in %s on line %d
  33. Exception: {closure}(): Argument #1 ($a) must be of type A, B given
  34. Exception: {closure}(): Argument #1 ($a) must be of type A, B given