1. 程式人生 > >php設計模式--命名空間與自動載入

php設計模式--命名空間與自動載入

使用 命令 說明 自動載入 str space () 就會 sta

關於命名空間:

  最早的php是沒有命名空間的概念的,這樣不能存在相同名稱的類或者函數,當項目變大了之後,產生沖突的可能性就高了,代碼量也會變大,為了規劃,從php5.3開始對命名空間就支持了。

說明代碼:

test1.php
<?php //聲明命名空間 namespace Test1; function test(){ echo "test1<br/>"; }
test2.php
<?php
//聲明命名空間
namespace Test2;

function test(){
	echo "test2<br/>";
}

將test1.php ,test2.php引入到test.php中:

test.php
<?php
//引入test1,test2
require ‘test1.php‘;
require ‘test2.php‘;

//命名空間的使用
Test1\test();
Test2\test();

 如果不使用命名空間,顯而易見php會報函數名重復致命錯誤,如果使用命令空間結果如下:

test1
test2

關於自動載入: 

  之前的php都是通過include或者require來引入php的,當項目越來越大的時候,如果一個php文件需要引入幾十個php類的時候,那就會引入幾十行,這樣對管理代碼和開發來說是很不方便的。在php5.2之後就提供了類的自動載入功能。

   在php5.2中提供了__autoload 方法來引入,但是當多個php文件同時使用此方法時會有函數名重復的可能,在php5.3中這個函數被廢棄了,系統提供了一個spl_auto_register()的方法。當換成spl_auto_register自動載入類之後,可避免沖突。

Test3.php
class Test3 { static function test() { echo "test3-class<br/>"; } }
Test4.php
<?php class Test4 { static function test() { echo "test4-class<br/>"; } }
<?php
spl_autoload_register(‘autoload1‘);//函數名作為參數傳入
spl_autoload_register(‘autoload2‘);//函數名作為參數傳入可支持多個

Test3::test(); 
Test4::test(); 

function autoload1($class) 
{ 
  require __DIR__.‘/‘.$class.‘.php‘; 
}

function autoload2($class)
{
	require __DIR__.‘/‘.$class.‘.php‘;
}

  

結果如下:

test3-class
test4-class

* 當php執行過程中發現你使用的類並不存在,這時候,php會把那個類名(Test3)告訴自動載入函數(autoload),然後我們只需要引入相關類就可以了。

總結:命名空間和自動載入對我們寫好面向對象開發是很重要的。

php設計模式--命名空間與自動載入