|
Late Static BindingsAs of PHP 5.3.0, PHP implements a feature called late static bindings which can be used to reference the called class in a context of static inheritance. More precisely, late static bindings work by storing the class named in the last "non-forwarding call". In case of static method calls, this is the class explicitly named (usually the one on the left of the :: operator); in case of non static method calls, it is the class of the object. A "forwarding call" is a static one that is introduced by self::, parent::, static::, or, if going up in the class hierarchy, forward_static_call. The function get_called_class can be used to retrieve a string with the name of the called class and static:: introduces its scope. This feature was named "late static bindings" with an internal perspective in mind. "Late binding" comes from the fact that static:: will not be resolved using the class where the method is defined but it will rather be computed using runtime information. It was also called a "static binding" as it can be used for (but is not limited to) static method calls. Limitations of self::Static references to the current class like self:: or __CLASS__ are resolved using the class in which the function belongs, as in where it was defined: Example #1 self:: usage
<?php The above example will output: A Late Static Bindings' usageLate static bindings tries to solve that limitation by introducing a keyword that references the class that was initially called at runtime. Basically, a keyword that would allow you to reference B from test() in the previous example. It was decided not to introduce a new keyword but rather use static that was already reserved. Example #2 static:: simple usage
<?php The above example will output: B
Example #3 static:: usage in a non-static context
<?php The above example will output: success! success! success! Fatal error: Call to private method C::foo() from context 'A' in /tmp/test.php on line 9
|