Hi internals,
I used to use abstract static function prior to php 5.2, because when I
consider static class as a singleton, I can use abstract static function to
delay the implementation of some methods to the derived classes. This
happens, for example, when I declare a parent dispatcher, and extend it into
two classes - action dispatcher and ajax dispatcher - and declare them
static as I want to keep them a singleton because they are just application
models, not domain models:
<?php
abstract class Dispatcher {
abstract public static function dispatch();
public static function exampleMethod() {
...
}
}
final class ActionDispatcher {
public static function dispatch() {
parent::exampleMethod();
// other code...
}
}
final class AjaxDispatcher {
public static function dispatch() {
parent::exampleMethod();
// other code...
}
}
?>
Unfortunately, since php 5.2, although it does still allow declaring
static methods in an interface, it simply generates a message when declaring
abstract static functions with error_reporting set to E_ALL | E_STRICT.
PHP is a dynamic language, not static as C++ and Java. So, why not allow
abstract static functions? It is also a good way to support singleton
natively.
Waiting for explanations. Thanks :)
--
Best regards,
Jingcheng Zhang
Room 304, Dormitory 26 of Yuquan Campus, Zhejiang University
P.R.China