The good news is late static binding has been introduced into head and looks like it will be merged into 5.3 before it is released. The horrible news is I really don't think the patch went as far as it needs to.
He talks about the original intention of the functionality (flexible inheritance for static methods/properties/constants) and how it was implemented, but with one small issue - that "static will ALWAYS return the 'resolved' name of the class used to call the current function". He illustrates with a code example showing an extended class returning a static property.
He also mentions two suggestions to help fix this issue:
- setting the behavior of parent:: such that it forwards the calling class through the next function call.
- introducing another scope [...] using a new keyword so parent:: could remain the same