Hello Jochem,
Tuesday, April 25, 2006, 3:15:52 PM, you wrote:
> Petar Nedyalkov wrote:
>> On Tuesday 25 April 2006 14:30, Edin Kadribasic wrote:
>>
>>>Hi,
>>>
>>>I was wondering if someone could enlighten me why it is not possible to
>>>create on-the-fly static properties:
>>>
>>>php -r 'class foo{}; foo::$bar = 1;'
>>>Fatal error: Access to undeclared static property: foo::$bar in Command
>>>line code on line 1
>>
>>
>> This totally breaks the capsulation in the OO paradigm, so I find it the right
>> behaviour. Taking apart the fact that there's no compilation in PHP, it also
>> prevents capsulation and making a member variable of an object available only
>> after it's declaration in the class (except for stdClass) is correct for me.
>> I see this as "You can't redefine the model at runtime".
> Rubys allows exactly that and I'm sure your not going to say that Ruby is not an OO
> language - Javascript likewise, in that it allows runtime definition/extension of
> the model (granted it's prototype based rather than class based).
Do not mix class based OO like PHP and prototype based OO like JavaScript.
> (anyone with the argument that PHP!=Ruby or PHP!=Javascript might consider that
> PHP!="the OO paradigm")
PHP simply supports its own set and view of OO.
> I don't think the Fatal Error mentioned above is, from a endusers' POV,
> what would be expected given the ability to define non-static properties on the fly...
> If I had to guess as to what kind of error was raised I would have put my money on
> E_STRICT - i.e. 'we don't recommend this way of doing things, but it doesn't hurt the
> engine per se'
> having said that I have never needed to define static properties on the fly, so it's
> all rather academic. :-)
>>
>>
>>>Was this not possible because of the engine implementation of the static
>>>properties?
>>>
It is just some decision that was taken that the newer OO stuff should be a
bit more strict.
Best regards,
Marcus