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

 ID:                 51225
 User updated by:    xiaodujinjin at gmail dot com
 Reported by:        xiaodujinjin at gmail dot com
 Summary:            cannot define a class with the same name as an
                     interface
 Status:             Assigned
 Type:               Bug
 Package:            Class/Object related
-Operating System:   Windows XP
+Operating System:   Windows XP MT15i
 PHP Version:        5.2.13
 Assigned To:        johannes
 Block user comment: N
 Private report:     N

 New Comment:

xiaodujin...@gmail.com


Previous Comments:
------------------------------------------------------------------------
[2012-03-20 21:05:19] LaKing at D250 dot hu

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.

------------------------------------------------------------------------
[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] 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.

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


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

Reply via email to