Re: late static binding (please break BC?)
| From: | Etienne Kneuss | Date: | Tue, 05 Jun 2007 17:17:18 +0000 |
| Subject: | Re: late static binding (please break BC?) | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-30074@lists.php.net to get a copy of this message | ||
Bart de Boer wrote:
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. :) Late static binding can also be used to access static properties, of course. The same class resolution mechanism is used by foo::$member and foo::method(); so the keyword would apply to both.Same with magic syntax like $a = new self();
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:: ?It's always dangerous to introduce a new keyword, as it can/will break BC (i.e what if somebody has defined a function derived(), the parser would choke on that). I'm personally fine with static, even if it may eventually introduce some confusion. Regards -- Etienne Kneuss http://www.colder.ch Men never do evil so completely and cheerfully as when they do it from a religious conviction. -- Pascal