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