Thinkphp3.2.3自定義類的多種加載方式

我們在用thinkphp開發的時候 ,免不了要寫自己的一些類用來做操作,這也是符合OOP的思想的。那麼我們經常糾結於這個類文件放哪比較合適。爲什麼我new了之後報找不到類。等等一系列無語的問題。下面我給講講怎麼做纔好。。我的建議是,你如果這個類是整個項目都要使用到 ,你就放Vendor目錄下 如果是模塊使用的話你就放模塊的跟目錄作爲一個組件吧。下面我一一進行介紹。


假設我們現在有個php類,這個類的代碼是這樣

<?php
/**
 * Created by PhpStorm.
 * User: lenovo
 * Date: 2018/4/13
 * Time: 13:53
 */

class MyTool
{
    public function callme(){
        echo '1005';
    }
}

他提供一個輸出方法。然後我想全局使用它。那我就把他放在Vendor下。

像這樣



然後你控制器調用方式是

<?php
namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller {
    public function index(){
        Vendor('Entity.MyTool');
        $mytool = new \MyTool();
        $mytool->callme();
    }
}

打印效果



這裏我稍微說明一下 有些同學不理解  就是現在這個第三方的類是無命名空間的,那麼我們訪問的時候 爲了讓php編譯的時候能識別她 我們就要給她分配一個根命名空間,如果你不分配 ,他就默認是當前命名空間了。

第二種方式是,你指定一個命名空間。比如像這樣

<?php
/**
 * Created by PhpStorm.
 * User: lenovo
 * Date: 2018/4/13
 * Time: 13:53
 */
namespace Entity;//指定命名空間
class MyTool
{
    public function callme(){
        echo '1005';
    }
}

然後你調用的方式是這樣

<?php
namespace Home\Controller;
use Think\Controller;
use Entity\MyTool;//引入命名空間
class IndexController extends Controller {
    public function index(){
        Vendor('Entity.MyTool');
        $mytool = new MyTool();
        $mytool->callme();
    }
}

頁面打印效果



第二種情況是,你這個類只是針對一個模塊使用

先看一種默認的方式

你需要把他放在你指定的模塊裏面。我這裏是建立一個Entity目錄用來存放。



細心的童鞋會發現 這個文件的後綴變成了class.php 不是之前的.php了。這個大家要注意,你如果還是.php會找不到這個文件的,tp底層限制了。做了規範處理。所以我們按照他來。

因爲默認情況下 thinkphp底層處理的機制是支持命名空間來組織類文件的。

那麼我們就這樣去寫這個類。

<?php
/**
 * Created by PhpStorm.
 * User: lenovo
 * Date: 2018/4/13
 * Time: 13:53
 */
namespace Home\Entity;//自定義命名空間 要求模塊名\文件夾名字方式。
class MyTool
{
    public function callme(){
        echo '1006';
    }
}


然後調用的地方這樣

<?php
namespace Home\Controller;
use Think\Controller;
use Home\Entity\MyTool;
class IndexController extends Controller {
    public function index(){
        $mytool = new MyTool();
        $mytool->callme();
    }
}

需要引入她的命名空間,就會自動識別了。

打印效果



還有一種比較高端的方式是thinkphp支持自定義命名空間法

你可以在你的模塊裏面像這樣



然後你需要在你模塊配置文件裏面去註冊她

<?php
return array(
	//'配置項'=>'配置值'
    'AUTOLOAD_NAMESPACE'=>array(
        'MyNameSpace'=>APP_PATH.'Home/MyNameSpace',
    ),
);

注意名字要相同。。

你的類文件是這樣的需要

<?php
/**
 * Created by PhpStorm.
 * User: lenovo
 * Date: 2018/4/13
 * Time: 15:01
 */
namespace MyNameSpace;
class MyTool{
    public function callme(){
        echo '1007';
    }
}

然後你這樣調用

<?php
namespace Home\Controller;
use Think\Controller;
use MyNameSpace\MyTool;
class IndexController extends Controller {
    public function index(){
            $mytool = new MyTool();
            $mytool->callme();
    }
}

打印結果



ok 可以的。這種方式就比較靈活了,至少比前面那個默認的靈活很多吧。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章