標籤:clu dir 面向 命名 log 規劃 ati test 越來越大
關於命名空間:
最早的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,test2require ‘test1.php‘;require ‘test2.php‘;//命名空間的使用Test1\test();Test2\test();
如果不使用命名空間,顯而易見php會報函數名重複致命錯誤,如果使用命令空間結果如下:
test1test2
關於自動載入:
之前的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
<?phpclass Test4{static function test(){echo "test4-class<br/>";}}
<?phpspl_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-classtest4-class
* 當php執行過程中發現你使用的類並不存在,這時候,php會把那個類名(Test3)告訴自動載入函數(autoload),然後我們只需要引入相關類就可以了。
總結:命名空間和自動載入對我們寫好物件導向開發是很重要的。
php設計模式--命名空間與自動載入