When a::out()
executed, the object does not have a property $test
. That is why it $this->test = 8;
causesa::__set()
.
But it a::__set()
does not create a property $test
, and the next statement ( return $this->test;
) cannot find it and issues a notification.
You must declare the properties of the object in the class definition and initialize them in the constructor (if necessary):
class a {
private $test;
public function __set($property, $value) {
}
public function out() {
$this->test = 8;
return $this->test;
}
}
__set()
$this->test = 8;
$test
, ( ), 8
.
__set()
, , ( a private
, , protected
private
) __set()
. __set()
$this->test = 8;
no-op.