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

 ID:               51225
 User updated by:  tony at marston-home dot demon dot co dot uk
 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 disagree. class_exists() SHOULD check if that name has already been
declared as an interface otherwise you get the following situation:



if (!class_exists('foobar') {  // returns false

    class foobar{}             // fails because interface exists

}



On the one hand it is saying "a class with the name 'foobar' does not
exist" which is immediately followed by "you cannot create a class with
the name 'foobar' as it already exists". That is not logical to me.


Previous Comments:
------------------------------------------------------------------------
[2010-03-08 00:55:52] johan...@php.net

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.

------------------------------------------------------------------------
[2010-03-08 00:28:39] der...@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] ka...@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

Reply via email to