xref: /PHP-7.4/tests/classes/__set__get_001.phpt (revision 782352c5)
1--TEST--
2ZE2 __set() and __get()
3--FILE--
4<?php
5class setter {
6	public $n;
7	public $x = array('a' => 1, 'b' => 2, 'c' => 3);
8
9	function __get($nm) {
10		echo "Getting [$nm]\n";
11
12		if (isset($this->x[$nm])) {
13			$r = $this->x[$nm];
14			echo "Returning: $r\n";
15			return $r;
16		}
17		else {
18			echo "Nothing!\n";
19		}
20	}
21
22	function __set($nm, $val) {
23		echo "Setting [$nm] to $val\n";
24
25		if (isset($this->x[$nm])) {
26			$this->x[$nm] = $val;
27			echo "OK!\n";
28		}
29		else {
30			echo "Not OK!\n";
31		}
32	}
33}
34
35$foo = new Setter();
36
37// this doesn't go through __set()... should it?
38$foo->n = 1;
39
40// the rest are fine...
41$foo->a = 100;
42$foo->a++;
43$foo->z++;
44var_dump($foo);
45
46?>
47--EXPECTF--
48Setting [a] to 100
49OK!
50Getting [a]
51Returning: 100
52Setting [a] to 101
53OK!
54Getting [z]
55Nothing!
56Setting [z] to 1
57Not OK!
58object(setter)#%d (2) {
59  ["n"]=>
60  int(1)
61  ["x"]=>
62  array(3) {
63    ["a"]=>
64    int(101)
65    ["b"]=>
66    int(2)
67    ["c"]=>
68    int(3)
69  }
70}
71