Hi, So definetly I need to prepend the \ or declare the "usage" of the class at the beginning in order to use classes declared in the global scope? This means SPL classes and 3rd-party classes.
Is there a way to import all the SPL classes at once? ;) (use SPL\*, use PDO\*).. just wondering. Thanks On Tue, Mar 31, 2009 at 5:38 PM, Stan Vassilev | FM <sv_for...@fmethod.com> wrote: > > 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 > > -- Pablo Fischer (pablo [arroba/at] pablo.com.mx) -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php