014.phpt 922 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. --TEST--
  2. Test nullsafe in binary op
  3. --FILE--
  4. <?php
  5. function try_and_dump($fn) {
  6. try {
  7. var_dump($fn());
  8. } catch (\Error $e) {
  9. echo $e->getMessage() . "\n";
  10. }
  11. }
  12. class Foo {
  13. public function bar() {
  14. echo "bar\n";
  15. }
  16. }
  17. $foo = new Foo();
  18. $null = null;
  19. try_and_dump(fn() => $null?->null() + $null?->null());
  20. try_and_dump(fn() => $foo?->bar() + $null?->null());
  21. try_and_dump(fn() => $null?->null() + $foo?->bar());
  22. try_and_dump(fn() => $foo->bar() + $null?->null());
  23. try_and_dump(fn() => $null?->null() + $foo->bar());
  24. try_and_dump(fn() => $null?->null() + $null->null());
  25. try_and_dump(fn() => $null->null() + $null?->null());
  26. try_and_dump(fn() => ($foo?->bar() + $foo?->bar())?->baz());
  27. ?>
  28. --EXPECT--
  29. int(0)
  30. bar
  31. int(0)
  32. bar
  33. int(0)
  34. bar
  35. int(0)
  36. bar
  37. int(0)
  38. Call to a member function null() on null
  39. Call to a member function null() on null
  40. bar
  41. bar
  42. Call to a member function baz() on int