# 命名空間
采用命名空間方式定義和自動加載類庫文件,遵循psr-0規范,只需要給類庫正確定義所在的命名空間,并且命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載
> 特別注意的是,如果你需要調用PHP內置的類庫,或者第三方沒有使用命名空間的類庫,記得在實例化類庫的時候加上`\`,例如:
>
> ~~~
> // 錯誤的用法
> $class = new stdClass();
> $xml = new SimpleXmlElement($xmlstr);
> // 正確的用法
> $class = new \stdClass();
> $xml = new \SimpleXmlElement($xmlstr);
>
> ~~~
例如,`\lib\Cache`類的定義為:
~~~
namespace lib;
class Cache
{
}
~~~
如果我們實例化該類的話,應該是:
~~~
$class = new \lib\Cache();
~~~
系統會自動加載該類對應路徑的類文件,其所在的路徑是?`/lib/Cache.php`。
> 默認的目錄規范是小寫,類文件命名是駝峰法,并且首字母大寫。
## 自定義類庫
如果需要增加新的根命名空間,我們只需要把自己的類庫包目錄放入`extend`目錄,就可以自動注冊對應的命名空間,例如:
我們在`extend`目錄下面新增一個`my`目錄,然后定義一個`\extend\my\Test`類(?類文件位于`extend/my/Test.php`)如下:
~~~
namespace extend\my;
class Test
{
public function sayHello()
{
echo 'hello';
}
}
~~~
我們就可以直接實例化和調用:
~~~
$Test = new \extend\my\Test();
$Test->sayHello();
~~~
## 應用類庫包
為了避免和`Composer`自動加載的類庫存在沖突 ,應用類庫的命名空間的根都統一以`application`命名,例如:
~~~
namespace application\index\model;
class User extends \think\Model
{
}
~~~
其類文件位于?`application/index/model/User.php`。
~~~
namespace application\admin\event;
class User
{
}
~~~
其類文件位于?`Applications/admin/event/User.php`。