这是一个在单个文件中使用PHP命名空间/自动加载的实验。
namespace trust;
class trust_network{
public function __construct(){
print "SUP";
}
}
namespace trust2;
$trust = new \trust\trust_network(); $do = new \test();
function __autoload($class){
require($class.".php");
print $class;
}
所以在命名空间trust2下,我正在调用“\ test” - 我也想从全局基础上的外部文件中自动加载该类。我写的不起作用。我知道我在命名空间下有__autoload,但是如何在全局范围内声明?在命名空间声明之前不能包含。
答案 0 :(得分:3)
对于一个文件中的多个名称空间,您应该使用大括号语法:
namespace n1 {
...
}
namespace n2 {
...
}
namespace {
...
}
在最后一个块中,您可以在全局命名空间中声明函数。参考:http://www.php.net/manual/en/language.namespaces.definitionmultiple.php
答案 1 :(得分:2)
自动加载通常是这样你可以为每个文件放一个类。因此,您应该具有以下布局
<强>的index.php 强>
function __autoload($class){
// You may need to convert backslashes in $class to forward slashes
// and strip the first slash, we'll leave the
require($class.".php");
// debug-only: print $class;
}
// Calling new here triggers __autoload to be called
$trust = new \trust\trust_network();
$do = new \test();
<强> /trust/trust_network.php 强>
namespace trust;
class trust_network{
public function __construct(){
print "TRUST_NETWORK";
}
}
<强> /test.php 强>
class test() {
public function __construct(){
print "TEST";
}
}
请注意,您应该使用spl_autoload_register,因为它允许多个系统挂钩他们自己的自动加载行为。从PHP 5.3开始,您可以执行以下操作
spl_autoload_register(function ($class) {
require($class.".php");
});