Timm Friebe wrote:
On Wed, 2004-02-18 at 18:40, Hans Lellelid wrote:
foreach($entities as $ent) { $peer = $ent->getPeer(); // e.g. might be BookPeer $peer->doSelect(new Criteria()); //static: BookPeer::doSelect() }
$m= new Reflection_Method($ent->getPeer(), 'doSelect'); $m->invoke(NULL, new Criteria());
/* untested */
Yeah, I'm sure there's a way to get something like that to work also. I'm not sure that's prefereable to call_user_func(), honestly -- and it doesn't get around the basic problem which is that calling code needs to know whether methods are static.
I guess I'm not sure why this is necessary ...
As Hartmut & Lukas mention, I don't know why the class consumer *needs* to know that it's static. Clearly internally there should be no possibility of referencing $this.
Also in my example the entire class is static -- i.e. all methods are static -- but what about cases where one or two methods in a class are static. Now $a->methodName() will work for most but all of a sudden you have to do $a::staticMethodName() for the static members.
What I see as the workaround is creating static methods that aren't marked as static -- e.g. that would address the issue in my example above. I think that's a lot worse than allowing invocation of static methods using instances, however, because I do want developers who read the API docs to know these are static functions.
Hans
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php