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

Reply via email to