Namespaces resolve names; they do not load files

The most common misreading of PHP 5.3 namespaces is that use is an import statement in the sense that Python or Java means it. It is not: it creates an alias, at compile time, in one file. Nothing is fetched, nothing is included, and a file with a correct use line and no autoloader still dies on the first new.

namespace ShopBilling;

use ShopCatalogueProduct;

$product = new Product(4417);
// the compiler now knows this means ShopCatalogueProduct,
// and then asks the autoloader for it exactly as it would
// for any class name it has never seen

What makes the two halves meet is a convention mapping a name onto a path, which is all PSR-0 is — and it is new enough this year that plenty of libraries still ship their own loader instead. The name arriving at your spl_autoload_register() callback is always fully qualified and always without a leading backslash, so the alias is gone by then and the callback only ever sees ShopCatalogueProduct. A class that cannot be resolved to a file under some rule cannot be autoloaded at all, no matter how carefully it is namespaced.