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 . "\n"; 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 55 56Notice: Undefined property: Test::$nonExisting in %s on line %d 57__get publicProperty 58 59Notice: Undefined property: Test::$publicProperty in %s on line %d 60__get protectedProperty 61 62Notice: Undefined property: Test::$protectedProperty in %s on line %d 63__get privateProperty 64 65Notice: Undefined property: Test::$privateProperty in %s on line %d 66__isset nonExisting 67__isset publicProperty 68__isset protectedProperty 69__isset privateProperty 70__set nonExisting 71__set publicProperty 72__set protectedProperty 73__set privateProperty 74 75