Edit report at http://bugs.php.net/bug.php?id=51225&edit=1
ID: 51225
Updated by: johannes@php.net
Reported by: tony at marston-home dot demon dot co dot uk
Summary: cannot define a class with the same name as an
interface
Status: Re-Opened
Type: Bug
Package: Class/Object related
Operating System: Windows XP
PHP Version: 5.2.13
New Comment:
I think the error message ("Cannot redeclare class") should be clearer
about classes and interfaces sharing the same namespace, which is needed
as type hints would be conflicting otherwise, but class_exists (by
default) should only check classes in my opinion. Any change should
consider that there's also interface_exists() and they should be
consistent.
Previous Comments:
------------------------------------------------------------------------
[2010-03-08 00:28:39] derick@php.net
Yes, I agree.
------------------------------------------------------------------------
[2010-03-08 00:23:50] tony at marston-home dot demon dot co dot uk
If an interface is a class, then it should show up in class_exists() and
get_declared_classes().
------------------------------------------------------------------------
[2010-03-08 00:02:25] kalle@php.net
Thats how the OO is designed, internally is interfaces just a class with
an additional flag.
So no bug here
------------------------------------------------------------------------
[2010-03-06 18:50:41] tony at marston-home dot demon dot co dot uk
Description:
------------
When I try to define a particular class it fails with "cannot redeclare
class ...". When I check with class_exists('...') it returns false, but
I still cannot create it. I eventually found some previous code which
uses the same name to define an interface.
Test script:
---------------
Interface Singleton{public static function instance();}
if (class_exists('Singleton')) {
$reason = 'class already exists';
} else {
class Singleton{
static function getInstance(){
return true;
}
}
}
Expected result:
----------------
If it is not possible to define a class and an interface with the same
name, then the class_exists() function should also include interface
names.
If it IS possible to have a class and an interface with the same name,
then the compiler should NOT reject the second reference.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51225&edit=1