PHP 命名空間

1、前言php

對於不少的PHP小白來講,命名空間是什麼,爲何要聲明命名空間呢? 框架

他們老是感到困惑!如下是本人的理解,望對童鞋們有所幫助。yii

 

2、介紹函數

命名空間是一個函數或者一個類的惟一標識。在流行的框架Lavaral,ThinkPHP,Yii等框架中,特別是結構複雜的文件層次和海量的代碼中,相同的類名和函數名就容易使咱們的程序拋出異常。因而,咱們引進了命名空間的概念。ui

結構以下:spa

1 <?php 2 namespace yii\rest; 3 
4 use yii\rest\Controller; 5 
6 class ActiveController extends Controller 7 { 8  // ......
9 }

很顯然咱們能夠看出, 命名空間的命名是 以咱們項目的頂級目錄爲開始以路徑的形式命名的。rest

引入咱們的命名空間是 use 短語句,另外也能夠 直接以 1 \yii\rest\Controller 的形式使用。code

除了咱們所說的避免海量代碼出現重複,從而拋出異常的優勢, 命名空間還能夠配合魔術常量 __dir__ 和函數 dirname() 使用,來拼接咱們的函數或類文件的絕對路徑。blog

在不少框架的底層咱們常常能夠看到 spl_autoload_register() 這個函數配合命名空間來加載類文件實現咱們的代碼邏輯。此函數是魔術方法__autoload()的實現。io

下面給出例子:

 1 <?php  2 
 3 // function __autoload($class) {  4 // require_once 'dirname(__dir__)' . "/{$class}.php";  5 // }
 6 
 7 function my_autoloader($class) {  8      require_once 'dirname(__dir__)' .   "/{$class}.php";  9 } 10 
11 spl_autoload_register('my_autoloader'); 12 
13 // 或者,自 PHP 5.3.0 起能夠使用一個匿名函數
14 spl_autoload_register(function ($class) { 15     require_once 'dirname(__dir__)' .   "/{$class}.php"; 16 });
相關文章
相關標籤/搜索