Bug #66862 [Com]: (Sub-)Namespaces unexpected behaviour

From: Date: Wed, 04 Jun 2014 11:19:43 +0000
Subject: Bug #66862 [Com]: (Sub-)Namespaces unexpected behaviour
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-186053@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=66862&edit=1

 ID:                 66862
 Comment by:         ajrattink at correct dot net
 Reported by:        celestino dot diaz at gmx dot de
 Summary:            (Sub-)Namespaces unexpected behaviour
 Status:             Open
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   LINUX
 PHP Version:        5.5.10
 Block user comment: N
 Private report:     N

 New Comment:

A similar simpler case:

c.php: namespace B; use A\Item; 
b.php: namespace B; class Item {};

main.php:  require 'b.php'; require 'c.php';  FATAL error
main.php:  require 'c.php'; require 'b.php';  No problem at all

Our system worked fine but unexpectedly started crashing because someone declared a new class that
suddenly caused a conflict in an included file elsewhere. 
Namespaces were supposed to just fix that problem. 
I would like that namespaces worked completely static and on a per unit level. The way it is
designed suggests that it should work that way...


Previous Comments:
------------------------------------------------------------------------
[2014-03-16 20:06:07] celestino dot diaz at gmx dot de

Missed subnamespace declaration in test script:

Sample\Subnamespace\classA.php:
<?php
namespace Sample\Subnamespace;
class classA {}

------------------------------------------------------------------------
[2014-03-09 18:10:52] celestino dot diaz at gmx dot de

changed PHP version

------------------------------------------------------------------------
[2014-03-09 13:57:09] celestino dot diaz at gmx dot de

Description:
------------
PHP v5.5.10

Namespaces have an unexpected behaviour depending on the script loading order.

Directory Structure:
Sample
|_ classA.php
|_ classB.php
|_ Subnamespace
  |_ classA.php


Test 1:
Output:
Fatal error:  Cannot use Sample\Subnamespace\classA as classA because the name is already in use in
Sample/classB.php on line 3


Test 2 (changed script oder):
Output:
Sample\classB
Sample\Subnamespace\classA
Sample\classA
Sample\classB
Sample\Subnamespace\classA


Test script:
---------------
Sample\classA.php:
<?php
namespace Sample;
class classA {}

Sample\classB.php:
<?php
namespace Sample;
use Sample\Subnamespace\classA;
class classB {
    public $classA;
    public function __construct() {
        $this->classA = new classA();
    }
}

Sample\Subnamespace\classA.php:
<?php
namespace Sample;
class classA {}


Test 1:
$a = new Sample\classA();
echo get_class($a)."\n";
$b = new Sample\classB();
echo get_class($b)."\n";
echo get_class($b->classA)."\n";


Test 2:
$b = new Sample\classB();
echo get_class($b)."\n";
echo get_class($b->classA)."\n";
$a = new Sample\classA();
echo get_class($a)."\n";
$b = new Sample\classB();
echo get_class($b)."\n";



Expected result:
----------------
Both (Test 1 & 2) should have the same output.



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



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


Thread (5 messages)

« previous php.bugs (#186053) next »