<?php
class Foo {
private $allowedNames = ['onlyThis', 'andThat'];
public function __set($name, $value) {
// only allow specific properties to be set pubically
if (!in_array($name, $this->allowedNames)) {
throw new Exception("No! Bad dog!");
} else {
$this->$name = $value;
}
}
}
$foo = new Foo;
$foo->onlyThis = true;
$foo->andThat = false;
var_dump($foo);
// This won't work
$foo->baz = 1;
Deprecated: Creation of dynamic property Foo::$onlyThis is deprecated in /in/ivnYo on line 10
Deprecated: Creation of dynamic property Foo::$andThat is deprecated in /in/ivnYo on line 10
object(Foo)#1 (3) {
["allowedNames":"Foo":private]=>
array(2) {
[0]=>
string(8) "onlyThis"
[1]=>
string(7) "andThat"
}
["onlyThis"]=>
bool(true)
["andThat"]=>
bool(false)
}
Fatal error: Uncaught Exception: No! Bad dog! in /in/ivnYo:8
Stack trace:
#0 /in/ivnYo(21): Foo->__set('baz', 1)
#1 {main}
thrown in /in/ivnYo on line 8
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Deprecated: Creation of dynamic property Foo::$onlyThis is deprecated in /in/ivnYo on line 10
Deprecated: Creation of dynamic property Foo::$andThat is deprecated in /in/ivnYo on line 10
object(Foo)#1 (3) {
["allowedNames":"Foo":private]=>
array(2) {
[0]=>
string(8) "onlyThis"
[1]=>
string(7) "andThat"
}
["onlyThis"]=>
bool(true)
["andThat"]=>
bool(false)
}
Fatal error: Uncaught Exception: No! Bad dog! in /in/ivnYo:8
Stack trace:
#0 /in/ivnYo(21): Foo->__set('baz', 1)
#1 {main}
thrown in /in/ivnYo on line 8
Process exited with code 255.