> Bart de Boer wrote: >> Ken Stanley wrote: >> > > ...
>> That's not right. Accessing the child class would only be possible from >> within an instantiated object. Unlike parent::, you will never be able >> to use static:: in a purely static context. Imagine there are multiple >> child classes which all inherit from the same base class. If there's no >> instance, PHP won't be able to know which child class to target with >> child::, static:: or whateverkeyword:: since it can be any one of those >> child classes. > > huh??? the 'child' class would refer to the class that was actually named > when then call to the method was made (thats what late static binding > means, > does it not?): > > class Data { > static function getTableName() { > throw new Exception('WTF'); > } > > static function findRange() { > $t = child::getTableName(); > } > } > > class Prod { > static function getTableName() { > return 'PRODS'; > } > } > > Data::findRange(); // child = Data class > Prod::findRange(); // child = Prod class > I think I misunderstood what was meant by late static binding. Thank you for clearing that up. And my sincerest apologies to everyone to whom I might have caused confusion. > if you require a class instance in order to use 'child' then > the whole point is moot - because you can already do > > $child = get_class($this); > > inside the relevant function (assuming the function is not declared > static, > and why would you declare it as such if your requiring an instance to use > 'child'?). > I thought late static binding had something to do with accessing static _variables_ in child classes. You're currently solving that problem by defining a static function getTableName() in the child class. But I think that isn't very efficient when you're dealing with complex objects and/or arrays which would need to be accessed frequently. If it were possible your code example could be solved as: <?php class Data { static function findRange() { if (!child::$tableName) throw new Exception('WTF'); else return child::$tableName; } } class Prod { static $tableName = 'PRODS'; } ?> But it seems this feature request belongs in a different thread. :) > maybe 'child' should be called 'callee' or even 'lsb' (that would make > people > hit the docs for sure :-)). alternatively maybe 'this' could be used as > the LSB keyword: > > this::foo(); > > the samentics for determining what class is referred to with 'this::' is > akin to > that used for determining what class is referred with '$this->', no? > > MAYBE php6 should do late static binding for 'self', akin to other OO > oriented > scripting langs .. and just live with BC. I seriously wonder whether much > code would > break ... given that 'self' is not currently late binding how often would > people have actually > overwritten static methods ion child classes that are being called via the > 'self' syntax > in [parent] classes? > Now I understand why this:: might be confusing since it is meant for objects. self:: would mean we can't access stuff in the current class anymore. What about derived:: or extended:: ? -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php