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

Reply via email to