xref: /PHP-7.1/tests/classes/bug63462.phpt (revision 113213f0)
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