On 18.11.2009, at 09:23, Jingcheng Zhang wrote:

> Hello internals,
> 
> I've just occured a syntax problem in the following script:
> 
> <?php
> class C {
>    public $n = 1;
> }
> $o = new C();
> $o->f = function () use ($o) {
>    echo $o->n;
> };
> $o->f();
> ?>
> 
> The result of this script is "Fatal Error: Call to undefined method C::f()".
> I don't know this is the expected result. After trying more tests of
> adding/removing properties on the fly, I concluded these
> inconsistencies/flaws:
> 
> 1. There is no way to add/remove instance-level members (both properties and
> methods) to class dynamically, but a way to add them to instance itself,
> which is a little buggy as above codes turns out;
> 2. There is no way to add/remove static members dynamically either;
> 3. There are __get(), __set(), __call() for instance-level members, and
> __callStatic() for static methods, but lacks __getStatic() and __setStatic()
> for static properties;
> 4. While using static class as object (general concept of "object", not
> "instance" here), it's extremly complex to simulate "prototype object", as
> static members simply do'not duplicate themselves at all while inheriting,
> therefore all of the child classes share a single static member of the
> parent class;
> 5. The inheritance rule of static member is not well documented, developers
> has to try it out themselves;
> 6. Static methods are allowed in interfaces, but not allowed in abstract
> class, which breaks the rule of abstraction;
> 7. An interface which has only static methods cannot ensure static methods
> in a class which implements it.
> 
> Sorry to raise so many complaint, but these inconsistencies bring me a big
> headache when developing. I would like to hear the design rules of PHP5's
> object model, at least, the explanations of the above inconsistencies.
> Thanks very much!
> 

It feels like a lot of these points have been raised before (especially in the 
thread where the addition of closures where discussed). It would be nice if you 
could turn this into an RFC, maybe digg a bit in the recent archives as well. 
This would help to make it easier to find out why something wasnt done etc. 
This helps in avoiding redundant discussions, but also helps people if after 
all certain changes do become possible/feasible eventually.

regards,
Lukas Kahwe Smith
m...@pooteeweet.org




--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to