Edit report at http://bugs.php.net/bug.php?id=53081&edit=1
ID: 53081
Updated by: rasmus@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] rasmus@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] rasmus@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