Hi,
Try this:
use PDO;
Regards,
Stan Vassilev
-------------------------------------------------------------------------------------
Hello,
I've been writing in the last days a web application on PHP 5.3 (beta1
although RC was released) cause of all the goodies it brings,
specially the namespaces, however I've been a bit stuck and
*surprised* that the only way to use a PHP class (like Iterators, PDO,
etc) is to call them from the global scope, this means: adding the \
at the beginning at the class.
My short question is: is it the only possible way? That means that I
need to be very careful when invoking PHP classes, like PDO? Currently
when I do:
$pdo = new PDO(..);
throws an error if I use it from one of "my" namespaced-classes, the error
is:
Fatal error: Class 'MyNameSpace\PDO' not found in /foo/bar/foome.php
throws an error, since spl_autoload can't find the 'MyNameSpace\PDO'
class. And yes I know I could create a class that extends from it, but
I don't think that's the best idea, just imagine the number of classes
I just need to create to cover the PHP classes I plan to use.
So, are there other workarounds for this? Like an autoload function
for PHP objects created inside a non-global scope (MyNameSpace)? I was
reading a thread about namespaces of last year and someone suggested
something like:
if (($p = strrpos($class, '\\')) !== false) {
$name = substr($class, $p+1);
if (class_exists("\\$name")) {
spl_autoload("\\$name");
// or use "\\$name";
return;
}
}
However that wont work cause: 1) one can't use "use" at the middle of
a PHP files, it needs to be used at the beginning afaik, 2)
spl_autoload will definetly find the class I'm passing (supposing PDO)
but it's useless since what is "expected" by PHP is a MyNameSpace\PDO
class. Probably I could use Reflection but I'm not sure if that's the
best idea...
Any other plans to use PHP objects (SPL, PDO, etc) inside non-global
namespaces? Maybe a "PHP" namespace that spl_autoload could catch,
like:
use PHP;
use PHP\SPL;
use PHP\ArrayObject;
(this idea was given in a previous thread :-))
.. or perhaps having something like spl_namespace_alias, when someone
can use inside their autoload functions:
spl_namespace_alias('/PDO', $classname); // where $classname is the
parameter received by the __autoload functions.
I don't have any problems to prepend the "\" but I think PHP should
catch that stuff automatically as it does with constants and
functions, no? Find a bit annoying to write the "\" to PHP classes I
want to use imho.
Thanks!
--
Pablo Fischer (pablo [arroba/at] pablo.com.mx)
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php