Quoting Stanislav Malyshev <[EMAIL PROTECTED]>:

This is even better than requiring, and makes the intent very clear. I don't think it decreases intuitiveness, on the contrary - from the look of the code it is immediately clear which exception would be used.

I went ahead and tried to apply this (explicit imports of classes in the same namespace) to the library that I'm working on, and it doesn't work. Here's the same example as before with 1.php and 2.php, but this time we're trying to avoid ambiguity by importing Test::Exception in each file:

1.php:
------
<?php

namespace Test;
import Test::Exception;

throw new Exception();


2.php:
------
<?php

namespace Test;
import Test::Exception;

throw new Exception();


(yes, they are identical; imagine that one defines, say, Test::Runner and the other defines Test::Case, both of which can throw Test::Exception)

Now I run parent.php, which looks like:
---------------------------------------

<?php

function __autoload($class) {
    include './test_exception.php';
}

try {
    include '2.php';
} catch (Exception $e) {
    echo get_class($e) . "\n";
}

try {
    include '1.php';
} catch (Exception $e) {
    echo get_class($e) . "\n";
}



And I get:
----------
$ php parent.php
Test::Exception

Fatal error: Import name 'Exception' conflicts with defined class in /Users/chuck/Desktop/php namespaces/1.php on line 4

This one I can't solve by removing the use of autoload, either - if I include test_exception.php before doing anything, it just fails on the first file that imports it:

$ php parent.php

Fatal error: Import name 'Exception' conflicts with defined class in /Users/chuck/Desktop/php namespaces/2.php on line 4



I can go back to avoiding the names of all PHP built in classes like we had to do before namespaces, but PHP _should_ be able to add new builtin classes without affecting my code - that should be one of the biggest benefits of namespaces. And that's not even talking about how including other non-namespaced code shouldn't be able to affect how my namespaced code behaves.

-chuck

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to