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--EXPECTF-- 53__get nonExisting 54Notice: Undefined property: Test::$nonExisting in %sbug63462.php on line %d 55__get publicProperty 56Notice: Undefined property: Test::$publicProperty in %sbug63462.php on line %d 57__get protectedProperty 58Notice: Undefined property: Test::$protectedProperty in %sbug63462.php on line %d 59__get privateProperty 60Notice: Undefined property: Test::$privateProperty in %sbug63462.php on line %d 61__isset nonExisting 62__isset publicProperty 63__isset protectedProperty 64__isset privateProperty 65__set nonExisting 66__set publicProperty 67__set protectedProperty 68__set privateProperty 69