Reflection.getPropertyDeclaringClass.overwrite2.phpt 911 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. /**
  3. * Test: Nette\Utils\Reflection::getPropertyDeclaringClass + doccomment workaround
  4. */
  5. declare(strict_types=1);
  6. use Nette\Utils\Reflection;
  7. use Tester\Assert;
  8. require __DIR__ . '/../bootstrap.php';
  9. trait A
  10. {
  11. /** a */
  12. protected $foo;
  13. }
  14. trait B
  15. {
  16. use A;
  17. /** b */
  18. protected $foo;
  19. }
  20. class C
  21. {
  22. use B;
  23. /** c */
  24. protected $foo;
  25. }
  26. class D extends C
  27. {
  28. /** d */
  29. protected $foo;
  30. }
  31. // Property in class
  32. Assert::same('D', Reflection::getPropertyDeclaringClass(new ReflectionProperty('D', 'foo'))->getName());
  33. // Property in class
  34. Assert::same('C', Reflection::getPropertyDeclaringClass(new ReflectionProperty('C', 'foo'))->getName());
  35. // Property in trait
  36. Assert::same('B', Reflection::getPropertyDeclaringClass(new ReflectionProperty('B', 'foo'))->getName());
  37. // Property in trait
  38. Assert::same('A', Reflection::getPropertyDeclaringClass(new ReflectionProperty('A', 'foo'))->getName());