在tp5中使用外部類的時候有三種方法
第一種就是通過composer下載,通過這種方式下載的外部類能夠支持自動加載,我們只要在使用的時候use一下命名空間就可以使用了
比如:我們的tp5第四季項目要使用到郵件發送類PHPMailer,這個類我們可以通過composer下載到當前項目,默認會下載到vendor目錄
在使用的時候只需在程序文件的開頭:use PHPMailer\PHPMailer\PHPMailer;即可使用
第二種方法就是一些我們自己寫的類或者是網上搜的類庫文件,從composer上面下載不到的,那么我們可以放到extend文件夾中,因為extends中的文件在tp5的結構體系內部,所以要考慮命名空間的問題,這樣在調用的時候才能正常使用,比如我們的tp5第四季開發的大型商城項目中,我們將無限極分類文件放到了extend文件夾中,那么就要為這些文件加上命名空間。
如我們的無限極分類類文件放到了extend文件夾下catetree自建的文件夾中,那么該類文件的命名空間就要設置為:namespace catetree;
接着在控制器中使用該類文件的時候我們也要use引入:use catetree\Catetree(類文件的名稱);
那么第三種方法就是直接將外部類放到我們項目的跟目錄下,比如tp5第四季我們在集成支付寶支付和微信支付的時候,不想考慮太多命名空間的問題就在根路徑下創建了一個文件夾pay
之后又在內部創建了兩個文件夾alipay和wxpay分別用來存放支付寶和微信的接口文件,但是雖然我們通過這種簡單粗暴的方法引入了,但是在使用的時候對於一些新手可能就比較麻煩了,尤其是對命名空間機制不是很熟悉的學員,通常會在控制器中使用的時候提示加載不到類,下面我們以微信支付為例解決一下:
其實就是兩個小問題,第一將文件按照正確的路徑引入到項目
為了解決這個問題,我們先在index.php入口文件中定義了一個路徑常量
define(‘PAY_PLUS’, DIR . ‘/application/../’);
接着在需要微信支付的控制器的方法內部引入微信支付接口文件:
//微信支付
if($orderInfo['payment']==2 && $orderInfo['pay_status']==0){
$payPlus = PAY_PLUS.'./pay/wxpay/';
include($payPlus.'index2.php');
$obj = new \WeiXinPay2();
$qrurl = $obj->getQrUrl('1118');
//2.生成二維碼
\QRcode::png($qrurl);
}
如上代碼,我們又對入口文件中的路徑進行了二次組裝,這個是因為我們在微信的其他沒有被直接引入到項目中的文件中也要使用該路徑,所以定義成為了一個變量:$payPlus
還有第二點要注意的:我們在控制器的方法中如果需要實例化外部引入的類,一定要在類名前面加:\表示跟命名空間即可,如果你是新手沒看太懂,那就看看我們的視頻教程吧