1--TEST-- 2Test script to verify that magic methods should be called only once when accessing an unset property. 3--CREDITS-- 4Marco Pivetta <ocramius@gmail.com> 5--FILE-- 6<?php 7class Test { 8 public $publicProperty; 9 protected $protectedProperty; 10 private $privateProperty; 11 12 public function __construct() { 13 unset( 14 $this->publicProperty, 15 $this->protectedProperty, 16 $this->privateProperty 17 ); 18 } 19 20 function __get($name) { 21 echo '__get ' . $name; 22 return $this->$name; 23 } 24 25 function __set($name, $value) { 26 echo '__set ' . $name . "\n"; 27 $this->$name = $value; 28 } 29 30 function __isset($name) { 31 echo '__isset ' . $name . "\n"; 32 return isset($this->$name); 33 } 34} 35 36$test = new Test(); 37 38$test->nonExisting; 39$test->publicProperty; 40$test->protectedProperty; 41$test->privateProperty; 42isset($test->nonExisting); 43isset($test->publicProperty); 44isset($test->protectedProperty); 45isset($test->privateProperty); 46$test->nonExisting = 'value'; 47$test->publicProperty = 'value'; 48$test->protectedProperty = 'value'; 49$test->privateProperty = 'value'; 50 51?> 52 53--EXPECTF-- 54__get nonExisting 55Notice: Undefined property: Test::$nonExisting in %sbug63462.php on line %d 56__get publicProperty 57Notice: Undefined property: Test::$publicProperty in %sbug63462.php on line %d 58__get protectedProperty 59Notice: Undefined property: Test::$protectedProperty in %sbug63462.php on line %d 60__get privateProperty 61Notice: Undefined property: Test::$privateProperty in %sbug63462.php on line %d 62__isset nonExisting 63__isset publicProperty 64__isset protectedProperty 65__isset privateProperty 66__set nonExisting 67__set publicProperty 68__set protectedProperty 69__set privateProperty 70