Edit report at http://bugs.php.net/bug.php?id=53081&edit=1
ID: 53081
Comment by: giorgio dot liscio at email dot it
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:
simplified case
abstract class AFSItem
{
public static function getIfValid ($fullPath)
{
// i use static::isValid to get the method defined in the
called class
if(static::isValid($fullPath)) return new static($fullPath);
}
protected function __construct ($fp){}
// i want to force real classes to implement a way to check a path
before instance an object
protected abstract static function isValid ($fullPath); //
abstract declaration
}
class File extends AFSItem
{
protected static function isValid ($fullPath) //
implementation
{
return is_file($fullPath);
}
}
class Dir extends AFSItem
{
protected static function isValid ($fullPath) //
implementation
{
return is_dir($fullPath);
}
}
class Image extends File
{
protected static function isValid ($fullPath) //
implementation with override
{
if(parent::isValid($fullPath) AND
(bool)getimagesize($fullPath)) return true; return false;
}
}
Previous Comments:
------------------------------------------------------------------------
[2010-10-17 02:03:36] cmanley at xs4all dot nl
This bug (emitting E_STRICT for abstract static methods in PHP 5.3 while
static
inheritance has finally been implemented) leads to another bug that I
recently
submitted: http://bugs.php.net/bug.php?id=53086
These are definately different bugs, but this bug spawns the other one
which is
more catestrophic.
If you don't see the bug, then add E_STRICT to your error reporting:
error_reporting(E_ALL | E_STRICT);
------------------------------------------------------------------------
[2010-10-16 20:23:31] giorgio dot liscio at email dot it
Strict Standards: Static function cA::B() should not be abstract in
..\www\index.php on line 6
5.3.3
------------------------------------------------------------------------
[2010-10-16 19:42:48] [email protected]
Which strict warning do you get? I don't see one.
------------------------------------------------------------------------
[2010-10-16 19:39:13] giorgio dot liscio at email dot it
so, felipe says that is not a bug and hes right
rasmus you say that this code is correct, but i still get a strict
warning
abstract class cA {
static function A(){static::B();}
abstract static function B();
}
class cB extends cA {
static function B(){echo "ok";}
}
cB::A();
------------------------------------------------------------------------
[2010-10-16 09:37:51] giorgio dot liscio at email dot it
no more a change request
http://bugs.php.net/bug.php?id=53082
bug reported
thank you Rasmus!
------------------------------------------------------------------------
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