I ran the following code on 5.0.4 and 5.1.0 with identical results...
Could someone shed light one whether the observed behaviour is
intentional and/or correct?
I expected that one of the following would occur (which obviously doesn't :-):
1. the line commented with 'SET 2' would trigger a
call to __set() (which should fail?).
2. the key "test" would be set in the array returned
by __get() but not it the relevant array stored in
$this->array["insideArray"].
The reason I question whether what si observed below is wanted behaviour is
because I thought the __set() functionality was there to be able
to protect/control what stuffed into an object ... but apparently it's
rather easy to side step.
tia,
Jochem
<?php
class T {
private $array = array();
public function __get( $key ) {
echo "Getting $key\n";
return $this->array[$key];
}
public function __set( $key, $value ) {
echo "Setting $key\n";
$this->array[$key] = $value;
}
}
$t = new T;
$t->insideArray = array(); // SET 1
$t->insideArray["test"] = "testing!"; // SET 2
var_dump( $t );
?>
OUTPUT:
Setting insideArray
Getting insideArray
object(T)#1 (1) {
["array:private"]=>
array(1) {
["insideArray"]=>
array(1) {
["test"]=>
string(8) "testing!"
}
}
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php