xref: /PHP-7.0/Zend/tests/bug63462.phpt (revision 33b104c7)
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