ReflectionClass_setStaticPropertyValue_001.phpt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. --TEST--
  2. ReflectionClass::setStaticPropertyValue()
  3. --CREDITS--
  4. Robin Fernandes <robinf@php.net>
  5. Steve Seear <stevseea@php.net>
  6. --SKIPIF--
  7. <?php if (version_compare(zend_version(), '2.4.0', '>=')) die('skip ZendEngine 2.3 or below needed'); ?>
  8. --FILE--
  9. <?php
  10. class A {
  11. static private $privateOverridden = "original private";
  12. static protected $protectedOverridden = "original protected";
  13. static public $publicOverridden = "original public";
  14. }
  15. class B extends A {
  16. static private $privateOverridden = "changed private";
  17. static protected $protectedOverridden = "changed protected";
  18. static public $publicOverridden = "changed public";
  19. }
  20. echo "Set static values in A:\n";
  21. $rcA = new ReflectionClass('A');
  22. $rcA->setStaticPropertyValue("\0A\0privateOverridden", "new value 1");
  23. $rcA->setStaticPropertyValue("\0*\0protectedOverridden", "new value 2");
  24. $rcA->setStaticPropertyValue("publicOverridden", "new value 3");
  25. print_r($rcA->getStaticProperties());
  26. echo "\nSet static values in B:\n";
  27. $rcB = new ReflectionClass('B');
  28. $rcB->setStaticPropertyValue("\0A\0privateOverridden", "new value 4");
  29. $rcB->setStaticPropertyValue("\0B\0privateOverridden", "new value 5");
  30. $rcB->setStaticPropertyValue("\0*\0protectedOverridden", "new value 6");
  31. $rcB->setStaticPropertyValue("publicOverridden", "new value 7");
  32. print_r($rcA->getStaticProperties());
  33. print_r($rcB->getStaticProperties());
  34. echo "\nSet non-existent values from A with no default value:\n";
  35. try {
  36. var_dump($rcA->setStaticPropertyValue("protectedOverridden", "new value 8"));
  37. echo "you should not see this";
  38. } catch (Exception $e) {
  39. echo $e->getMessage() . "\n";
  40. }
  41. try {
  42. var_dump($rcA->setStaticPropertyValue("privateOverridden", "new value 9"));
  43. echo "you should not see this";
  44. } catch (Exception $e) {
  45. echo $e->getMessage() . "\n";
  46. }
  47. ?>
  48. --EXPECTF--
  49. Set static values in A:
  50. Array
  51. (
  52. [privateOverridden] => new value 1
  53. [protectedOverridden] => new value 2
  54. [publicOverridden] => new value 3
  55. )
  56. Set static values in B:
  57. Array
  58. (
  59. [privateOverridden] => new value 4
  60. [protectedOverridden] => new value 2
  61. [publicOverridden] => new value 3
  62. )
  63. Array
  64. (
  65. [privateOverridden] => new value 5
  66. [protectedOverridden] => new value 6
  67. [publicOverridden] => new value 7
  68. )
  69. Set non-existent values from A with no default value:
  70. Class A does not have a property named protectedOverridden
  71. Class A does not have a property named privateOverridden