PHP介面請求自動分發呼叫對應類中的函式

2021-10-23 16:16:02 字數 2169 閱讀 6781

實現原理:

在基類中定義乙個公共的呼叫函式,這裡我定義函式名為handleactionhandleaction函式要實現的功能是首先獲取呼叫該函式的子類名稱,然後得到子類的例項,最後約定請求某一介面時,通過傳參handle=要呼叫的介面函式名,即可實現介面請求的自動分發了。

在往下檢視示例之前,你需要對php中__class__get_class()get_called_class()的使用和區別有一定的了解,可以檢視我的另一篇文章:php方法繼承呼叫,如何獲取子類名稱?get_class() 和 get_called_class()

1、為了減少多次new帶來的資源消耗,我們要使用單例模式

在基類中,可以定義實現單例模式的方法,然後在繼承它的子類中呼叫:

class

base

self:

:$instance

[$classname]=

new$classname

;return self:

:$instance

[$classname];

}}class

child

extends

base

$child

= child:

:getinstance()

;// 子類例項

通過以上實現,就可以得到子類child的單例例項了,如果有更多的子類,通過以上實現也可以得到對應子類的單例例項,而不用在每個子類中重複宣告單例實現方法,是不是很方便呢。

2、實現自動分發呼叫對應類中的介面函式

其實開頭已經說過,實現起來不難,就是根據介面請求時的傳參,然後根據傳參值,自動分發呼叫當前類中的對應介面函式:

class

base

self:

:$instance

[$classname]=

new$classname

;return self:

:$instance

[$classname];

}/**

* 根據請求介面時傳參,自動分發呼叫對應類例項中的可執行函式

*/static

function

handleaction()

else}}

class

childa

extends

base..

.// 其他方法

}class

childb

extends

base..

.// 其他方法

}

然後在介面中引用:

介面檔案aa.php

<?php

require_once

'base父類檔案'

;require_once

'childa子類檔案'

;// 當然以上你可以使用 spl_autoload_register 實現類的自動載入,此處只為了演示,就不作實現了。

childa:

:handleaction()

;?>

介面檔案bb.php同上。

最後你就可以呼叫介面時,不管是get還是post請求,只需帶上引數handle=要呼叫的介面函式名即可呼叫對應子類的介面函式:

// 示例

requireurl:

server/api/

a.php?handle=getinfo

server/api/

b.php?handle=getinfo

// server/api/b.php?handle=其他方法名

// 結果:

this is childa

this is childb

以上即可實現通過簡潔的**,將請求自動分發到對應類的介面函式了,是不是很簡單呢。

php模擬post提交請求,呼叫介面

模擬post進行url請求 param string url param string param function request post url param posturl url curlpost param ch curl init 初始化curl curl setopt ch,curlo...

php模擬post提交請求,呼叫介面

模擬post進行url請求 param string url param string param function request post url param posturl url curlpost param ch curl init 初始化curl curl setopt ch,curlo...

php模擬post提交請求,呼叫介面

模擬post進行url請求 param string url param string param function request post url param posturl url curlpost param ch curl init 初始化curl curl setopt ch,curlo...