Consider below code please:
class foo { function bar() { $this->baz = \'hello there!\'; } } $f = new foo; $f->bar(); echo $f->baz; // h
It's because how PHP works. If you set uninitialized property, it will be created even without __set. On the other hand, if you try to read uninitialized property, you end with warning.
__set