tp5數據庫連接源碼分析

今天研究了一下tp5的數據庫連接的源碼部分。僅限於數據庫連接,後期我會再着重分析一下數據庫查詢的源碼。

我們在使用tp5操作數據庫的時候,基本上都是通過Db類實現的。或者是使用db()函數。其實db()函數也是通過Db類實現的。那麼在tp5中連接數據庫都涉及到了哪些文件呢?

think\Db
think\db\connector\Mysql (我們經常用到的就是mysql數據庫,所以就以mysql爲例來講)
think\db\Connection (上面mysql類的父類,連接器)
think\db\Query (查詢器)

假設數據庫的文件已經配置好,我們需要查詢edu_olatform數據庫中lesson表中的數據。需要進行如下圖所示的操作

db()方法就是helper.php中封裝好的方法。

Db類中的connect方法

現在得到了一個Mysql的實例化對象,並且要調用它的name方法。在Mysql類中查找name方法是沒有的,發現mysql類繼承db\Connector.php,在Connector.php查找也沒有。因爲我們得到的是一個mysql實例化的對象,如果它調用了不存在的方法,那麼就執行魔術方法__call()

$method 是 name

$args 是 lesson字符串

call_user_func_array函數的作用是調用回調函數,並把一個數組參數作爲回調函數的參數,那麼name就相當於回調函數,lesson就是所傳的參數。整個代碼的含義就是執行,返回一個Query對象。獲取到這個對象就說明連接成功了。

$this->getQuery()爲以下代碼,作用是return一個Query類的實例化對象。

我們看一下call_user_func_array函數中第一個參數是一個數組。根據php官網對call_user_func_array的解釋https://www.php.net/manual/zh/function.call-user-func-array.php

就是調用Query實例化對象的name方法,而$args就是name方法的參數。作用就是制定數據表名lesson。

看到query對象中有一個name屬性說明數據庫連接成功了。

 

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