Bug #70135 [Opn]: class alias conflict with class defined in another file with the same namespace
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)