Req #53081 [Bgs]: why you should bring back abstract static methods

From: Date: Sat, 16 Oct 2010 06:48:56 +0000
Subject: Req #53081 [Bgs]: why you should bring back abstract static methods
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-155234@lists.php.net to get a copy of this message
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


Thread (25 messages)

« previous php.bugs (#155234) next »