Skip to content

Commit 0de5fb4

Browse files
committed
Merge branch 'PHP-5.4' of git.php.net:/php-src into PHP-5.4
2 parents ba35ae3 + bdc1e23 commit 0de5fb4

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

tests/classes/bug63462.phpt

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

0 commit comments

Comments
 (0)