<?php
namespace test;
class Exception {}
$a = new Exception('hi');
?>

The above code works just fine.

Yes there is a concept.  import is best used within a namespace.  So,
namespace your code and there is no need to import global classes.

Yep, it works if your whole application uses one namespace, but what if you have a core package that defines some exceptions and another package, with a different namespace, that wants to use the core exceptions? Like

namespace App;
class Exception extends Exception { ... }

and in another File:

namespace App::Db;
import App::Exception;
....

This doesn't work. And worse: imagine PEAR would bring a PEAR::Exception along, PEAR would be my basic framework and i wouldn't care about ::Exception, i don't even know it's there - i am using PEAR. In every Script i would like to use PEAR::Exception in a convenient way i have to write:

<?php
import ::Exception AS WTF;
import PEAR::Exception;
?>
(Nevermind if this example doesn't fit the PEAR-idea, just s/PEAR/ randomFramework/g then)

You think this makes sense?
Or what about this:
pear/Mail_IMAP/IMAP.php (dunno if this file exists):
<?php
namespace PEAR::Mail::IMAP;
import ::Exception AS WTF;
import PEAR::Exception;

class Imap {
...
}

All this seems just wrong to me, sorry. And i fully agree with Markus:
But how to know in advance, e.g. think about other libraries, which
public classes possibly exist? Isn't this problematic then?

Let's say i PEAR would have namespaces and there is a class PEAR::DB::Mysql, i use this class as:
<?php
import PEAR::DB::Mysql;

class MyDb extends Mysql {
...
}

And surprisingly someday mysqlnd declares a class named "Mysql", that would break my code even though i explicitly declared that i want "PEAR::DB::Mysql" not some different Mysql class that comes from some fancy extension the admin added today.
So, why this behaviour?

regards,
Benjamin

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

Reply via email to