unset_properties.phpt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. --TEST--
  2. Un-setting instance properties causes magic methods to be called when trying to access them from outside the magic
  3. methods themselves.
  4. --FILE--
  5. <?php
  6. class Test
  7. {
  8. public $publicProperty = 'publicProperty set';
  9. protected $protectedProperty = 'protectedProperty set';
  10. private $privateProperty = 'privateProperty set';
  11. public function __get($name)
  12. {
  13. return '__get "' . $name . '"';
  14. }
  15. public function __set($name, $value)
  16. {
  17. $this->$name = $value;
  18. echo '__set "' . $name . '" to "' . $value . '"';
  19. }
  20. public function __isset($name)
  21. {
  22. echo '__isset "' . $name . '"';
  23. return isset($this->$name);
  24. }
  25. public function getPublicProperty()
  26. {
  27. return $this->publicProperty;
  28. }
  29. public function setPublicProperty($publicProperty)
  30. {
  31. $this->publicProperty = $publicProperty;
  32. }
  33. public function unsetProtectedProperty()
  34. {
  35. unset($this->protectedProperty);
  36. }
  37. public function getProtectedProperty()
  38. {
  39. return $this->protectedProperty;
  40. }
  41. public function setProtectedProperty($protectedProperty)
  42. {
  43. $this->protectedProperty = $protectedProperty;
  44. }
  45. public function unsetPrivateProperty()
  46. {
  47. unset($this->privateProperty);
  48. }
  49. public function getPrivateProperty()
  50. {
  51. return $this->privateProperty;
  52. }
  53. public function setPrivateProperty($privateProperty)
  54. {
  55. $this->privateProperty = $privateProperty;
  56. }
  57. }
  58. // verifying public property
  59. $o = new Test;
  60. echo $o->publicProperty;
  61. echo "\n";
  62. var_export(isset($o->publicProperty));
  63. echo "\n";
  64. unset($o->publicProperty);
  65. isset($o->publicProperty);
  66. echo "\n";
  67. echo $o->publicProperty;
  68. echo "\n";
  69. echo $o->getPublicProperty();
  70. echo "\n";
  71. echo $o->setPublicProperty('new publicProperty value via setter');
  72. echo "\n";
  73. echo $o->publicProperty;
  74. echo "\n";
  75. unset($o->publicProperty);
  76. $o->publicProperty = 'new publicProperty value via public access';
  77. echo "\n";
  78. var_export(isset($o->publicProperty));
  79. echo "\n";
  80. echo $o->publicProperty;
  81. echo "\n\n";
  82. // verifying protected property
  83. echo $o->getProtectedProperty();
  84. echo "\n";
  85. $o->unsetProtectedProperty();
  86. var_export(isset($o->protectedProperty));
  87. echo "\n";
  88. echo $o->getProtectedProperty();
  89. echo "\n";
  90. echo $o->setProtectedProperty('new protectedProperty value via setter');
  91. echo "\n";
  92. var_export(isset($o->protectedProperty));
  93. echo "\n";
  94. echo $o->getProtectedProperty();
  95. echo "\n\n";
  96. // verifying private property
  97. echo $o->getPrivateProperty();
  98. echo "\n";
  99. $o->unsetPrivateProperty();
  100. var_export(isset($o->privateProperty));
  101. echo "\n";
  102. echo $o->getPrivateProperty();
  103. echo "\n";
  104. echo $o->setPrivateProperty('new privateProperty value via setter');
  105. echo "\n";
  106. var_export(isset($o->privateProperty));
  107. echo "\n";
  108. echo $o->getPrivateProperty();
  109. echo "\n\n";
  110. ?>
  111. --EXPECT--
  112. publicProperty set
  113. true
  114. __isset "publicProperty"
  115. __get "publicProperty"
  116. __get "publicProperty"
  117. __set "publicProperty" to "new publicProperty value via setter"
  118. new publicProperty value via setter
  119. __set "publicProperty" to "new publicProperty value via public access"
  120. true
  121. new publicProperty value via public access
  122. protectedProperty set
  123. __isset "protectedProperty"false
  124. __get "protectedProperty"
  125. __set "protectedProperty" to "new protectedProperty value via setter"
  126. __isset "protectedProperty"true
  127. new protectedProperty value via setter
  128. privateProperty set
  129. __isset "privateProperty"false
  130. __get "privateProperty"
  131. __set "privateProperty" to "new privateProperty value via setter"
  132. __isset "privateProperty"true
  133. new privateProperty value via setter