我讨厌PHP命名空间.它们不像普通的那样工作,或者至少像我期望的那样.无论如何,因为我正在尝试编写一个小型库,我必须处理它们,我想知道你是否可以设法像对待C#或Java一样对待它们,也许使用spl_autoload_*函数.就像是:
图书馆:
<?php
namespace A
{
    class MyAClass {...}
}
namespace A\B
{
    class MyBClass {...}
}
?>
和应用程序:
<?php
include("library\autoloader.php");
use A; //Loads every class in A namespace
use A\B; //Loads every class in A\B namespace
$obj = new MyAclass();
$obj2 = new MyBCLass();
?>
我试过简单地说:
<?php
function autoload($name)
{
    //echo "loading {$name}.php<br />";
    require_once($name.".php");
}
spl_autoload_register("autoload");
?>
但我被迫这样做:
<?php
include("Library\autoload.php");
$obj = new MyNamespace\MyClass();
?>
我想做这样的事情:
<?php
include("Library\autoload.php");
use MyNamespace;    
$obj = new MyClass();
?>
glob结果来简单地加载文件夹中的所有文件include.如果根据命名空间组织文件,那么"将"加载命名空间中的所有类."use不加载类.use仅将命名空间名称别名为当前文件中的较短或替代名称.该类仅在第一次需要时加载; 例如,当你写new Foo或extends Foo.如果你想能够写出类似的东西use Foo\*,然后Foo用他们的名字引用其中的所有类:这在PHP中是不可能的.您可以做的最好是缩短命名空间前缀,例如use Foo\Bar as B,然后B\Baz在任何地方使用.