Edit report at https://bugs.php.net/bug.php?id=51225&edit=1
ID: 51225
Comment by: LaKing at D250 dot hu
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: Assigned
Type: Bug
Package: Class/Object related
Operating System: Windows XP
PHP Version: 5.2.13
Assigned To: johannes
Block user comment: N
Private report: N
New Comment:
The language-developers have two options. Either a clearer error message as a
quick-fix, or allowing interfaces and classes with the same name, with the
necessary underlying updates properly implemented in the language. That would
be the elegant, and logical way.
Previous Comments:
------------------------------------------------------------------------
[2010-09-23 08:03:40] i at walkinraven dot name
I think you the fact of class and interface sharing a same namespace should be
clearly written into the manual!
And the better way, the two should not share a same namespace at all.
It waste me some much time to check my project.
------------------------------------------------------------------------
[2010-08-05 23:38:58] bobalicious dot bob at gmail dot com
In my opinion, in order to be valid the code snippet should read:
if (!class_exists('foobar') && !interface_exists('foobar') ) {
class foobar{}
}
The error message on attempting to declare a class with the same name as an
interface should respond:
Cannot declare class as an interface exists with that name
The reverse message should also be possible.
It does not make sense to allow an interface and a class to have the same name
(type hinting is a great example why not), and 'class_exists' should only refer
to classes (the clue's in the name).
The confusion is merely down to an inaccurate error message.
Note: There's a reason it's not uncommon for people to prefix interfaces with
an
'i'
------------------------------------------------------------------------
[2010-03-08 10:35:06] tony at marston-home dot demon dot co dot uk
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.
------------------------------------------------------------------------
[2010-03-08 00:55:52] [email protected]
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] [email protected]
Yes, I agree.
------------------------------------------------------------------------
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
https://bugs.php.net/bug.php?id=51225
--
Edit this bug report at https://bugs.php.net/bug.php?id=51225&edit=1