Bug #70135 [Opn]: class alias conflict with class defined in another file with the same namespace

From: Date: Mon, 27 Jul 2015 14:12:18 +0000
Subject: Bug #70135 [Opn]: class alias conflict with class defined in another file with the same namespace
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-194753@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70135&edit=1

 ID:                 70135
 Updated by:         laruence@php.net
 Reported by:        php at lvht dot net
 Summary:            class alias conflict with class defined in another
                     file with the same namespace
 Status:             Open
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   linux & mac os x
 PHP Version:        5.6.11
 Block user comment: N
 Private report:     N

 New Comment:

actually, this is quite confused one.

since you are trying to use \Lv\Common\Foo as \Lv(current_namespace)\Foo

but you already have one \Lv\Foo defined in Foo.php,

so when you try to refer "Foo" in namespace Lv(Bar.php), which Foo should be used?

thanks


Previous Comments:
------------------------------------------------------------------------
[2015-07-27 13:59:58] laruence@php.net

see also : http://3v4l.org/Ootud

------------------------------------------------------------------------
[2015-07-25 16:08:30] php at lvht dot net

Description:
------------
In one file with a namespace(eg, Lv), we define a class named Foo.

In another with a subnamespace(eg, Lv\Common), we define another class with the *same* name Foo. 

In the third file with the same namespace(Lv), we first "import" Lv\Common\Foo using
"use Lv\Common\Foo" and then define a class named Bar that extends Foo(the Lv\Common\Foo).

In a test file, we first make an instance of Lv\Foo, and then try to make an instance of Lv\Bar,
which will failed with a fatal error.

Test script:
---------------
We need four files in the same directory.

1. In Foo.php,

<?php namespace Lv;
class Foo{}

2. In CommonFoo.php,

<?php namespace Lv\Common;
class Foo{}

3. In Bar.php,

<?php namespace Lv;
require 'CommonFoo.php';
use Lv\Common\Foo;
class Bar extends Foo {}

4. Finally, in app.php,
<?php
require 'Foo.php';
$foo = new Lv\Foo;
require 'Bar.php';
$bar = new Lv\Bar; # error will trigged by this line

Just run php app.php, you will see a fatal error.


Expected result:
----------------
The app.php should run without any error.

Actual result:
--------------
The error given,

PHP Fatal error:  Cannot use Lv\Common\Foo as Foo because the name is already in use in ...Bar.php 
on line 3


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



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


Thread (5 messages)

« previous php.bugs (#194753) next »