Bug #51225 [Asn]: cannot define a class with the same name as an interface

From: Date: Sun, 20 May 2012 02:40:44 +0000
Subject: Bug #51225 [Asn]: cannot define a class with the same name as an interface
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-170600@lists.php.net to get a copy of this message
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 MT15i
 PHP Version:        5.2.13
 Assigned To:        johannes
 Block user comment: N
 Private report:     N

 New Comment:

xiaodujinjin@gmail.com


Previous Comments:
------------------------------------------------------------------------
[2012-05-20 02:39:55] xiaodujinjin at gmail dot com

xiaodujinjin@gmail.com

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

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


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


Thread (13 messages)

« previous php.bugs (#170600) next »