Bug #53082 [Com]: unexp. warning with abstract static methods used inside another file

From: Date: Sun, 17 Oct 2010 00:45:32 +0000
Subject: Bug #53082 [Com]: unexp. warning with abstract static methods used inside another file
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-155266@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=53082&edit=1

 ID:                 53082
 Comment by:         giorgio dot liscio at email dot it
 Reported by:        giorgio dot liscio at email dot it
 Summary:            unexp. warning with abstract static methods used
                     inside another file
 Status:             Bogus
 Type:               Bug
 Package:            Scripting Engine problem
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

felipe is right, this is not a bug, but it is a limitation of the
design

read this and comment here please:
http://bugs.php.net/bug.php?id=53081


Previous Comments:
------------------------------------------------------------------------
[2010-10-17 02:24:01] cmanley at xs4all dot nl

If it doesn't work as expected then it's either a bug or poor design in
PHP. 
Either way it should be fixed. People put effort into reporting bugs, so
it's rude 
to flag them as bogus (to make them go away) without putting much
thought into 
them.

------------------------------------------------------------------------
[2010-10-16 17:22:00] felipe@php.net

So... Not a bug.

------------------------------------------------------------------------
[2010-10-16 17:07:32] felipe@php.net

This is because when the code is in another file, the error is triggered
in runtime, and when it is in the same file, it is triggered in
compile-time, so EG(error_reporting) has the default value (E_ALL &
~E_NOTICE & ~E_STRICT & ~E_DEPRECATED).

------------------------------------------------------------------------
[2010-10-16 16:34:33] felipe@php.net

The namespace is not a factor, but the require yes.

Internally the php_error_cb() function is called for both cases, but
just displays when the code is in another file because
EG(error_reporting) is set to 'E_ALL | E_STRICT', when it's in the same
file, EG(error_reporting) is 22519.

------------------------------------------------------------------------
[2010-10-16 09:36:52] giorgio dot liscio at email dot it

Description:
------------
without namespace works perfectly:


<?php
// index.php
ini_set("display_errors", true);
ini_set("error_reporting", E_ALL | E_STRICT);
abstract class AbstractFileSystemItem
{
	abstract static function ensurePathIsValid($fullPath);
}
class Dir extends AbstractFileSystemItem
{
	static function ensurePathIsValid($fullPath){}
}
?>

--------------------------------------------------------

with namespace and require: (test the two files)
gives unexpected warning 
Static function AbstractFileSystemItem::ensurePathIsValid() should not
be abstract

<?php
// index.php (run this)
ini_set("display_errors", true);
ini_set("error_reporting", E_ALL | E_STRICT);
require("FSNuovo/Directory.php");
?>


<?php
// FSNuovo/Directory.php
namespace FSNuovo;
abstract class AbstractFileSystemItem
{
	abstract static function ensurePathIsValid($fullPath);
}
class Dir extends AbstractFileSystemItem
{
	static function ensurePathIsValid($fullPath){}
}
?>

original discussion: http://bugs.php.net/bug.php?id=53081



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53082&edit=1


Thread (6 messages)

« previous php.bugs (#155266) next »