The __set() method is called when a property of a class is set, __get() when a property is retrieved.

An array is simple a way of listing things; the array itself is a piece of data. When you set a key in that array, you are not setting the array. It may help to think of it like this:

$t = new T;

$t->insideClass = new T;

$t->insideClass->test = "testing!";

In this case, should __set() be called for both lines? Or only for the first? An array is exactly the same, except you cannot define a __set() method on it.

Anyway, I don't think this question belongs in internals, imho.

-[Unknown]

-------- Original Message --------

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 Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to