Edit report at http://bugs.php.net/bug.php?id=53081&edit=1
ID: 53081 Updated by: ras...@php.net Reported by: giorgio dot liscio at email dot it Summary: why you should bring back abstract static methods Status: Bogus Type: Feature/Change Request Package: Class/Object related PHP Version: 5.3.3 Block user comment: N New Comment: What's not allowed? abstract class cA { static function A(){static::B();} abstract static function B(); } class cB extends cA { static function B(){echo "ok";} } cB::A(); This works fine. You obviously can't call self::B(), but static::B() is fine. Previous Comments: ------------------------------------------------------------------------ [2010-10-16 08:45:08] giorgio dot liscio at email dot it but it is not allowed :( ------------------------------------------------------------------------ [2010-10-16 08:43:14] ras...@php.net Right, that is exactly how it should work. ------------------------------------------------------------------------ [2010-10-16 08:36:35] giorgio dot liscio at email dot it i know, but: abstract class cA { //static function A(){self::B();} error, undefined method static function A(){static::B();} // good abstract static function B(); } class cB extends cA { static function B(){echo "ok";} } cB::A(); ------------------------------------------------------------------------ [2010-10-16 08:27:01] ras...@php.net No, you are calling a method in an abstract class. The fundamental characteristic of an abstract class is that you cannot call methods in them. ------------------------------------------------------------------------ [2010-10-16 08:15:46] giorgio dot liscio at email dot it hi Rasmus, what an honor! can you please give me some example code? you are saying that self:: points to an abstract not-implemented method? for example: abstract class cA { static function A(){self::B();} abstract static function B(); } in this case can be thrown an error, but using static:: the call refers to the called class method, not the declaring class static function A(){static::B();} so it can be re-enabled in this case, no? in php static methods are really powerful unlike java's, c#'s, don't limit them! why interfaces allows static abstract methods? how self:: is resolved? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=53081 -- Edit this bug report at http://bugs.php.net/bug.php?id=53081&edit=1