PHP與大多數(shù)面向?qū)ο缶幊陶Z言一樣,不支持多重繼承.也就是說每個類只能繼承一個父類.為了解決這個問題,PHP引入了接口,接口的思想是指定了一個實現(xiàn)了該接口的類必須實現(xiàn)的一系列方法.接口是一種特殊的抽象類,抽象類又是一種特殊的類,所以接口也是一種特殊的類,為什么說接口是一種特殊的抽象類呢?如果一個抽象類里面的所有的方法都是抽象方法,那么我們就換一種聲明方法使用“接口“;也就是說接口里面所有的方法必須都是聲明為抽象方法,另外接口里面不能聲明變量(但可聲明常量constant),而且接口里面所有的成員都是public權(quán)限的。所以子類在實現(xiàn)的時候也一定要使用public權(quán)限實限。
江門ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
聲明一個類的時候我們使用的關(guān)鍵字是”class”,而接口一種特殊的類,使用的關(guān)鍵字是“interface”;
類的定義: class 類名{ … } ,接口的聲明:interface 接口名{ …}
代碼
代碼
?php
//定義一個接口使用interface關(guān)鍵字,“One”為接口名稱
interface One
{
//定義一個常量
const constant = 'constant value';
//定義了一個抽象方法”fun1”
public function fun1();
//定義了抽象方法”fun2”
public function fun2();
}
?
上例中定義了一個接口”one”,里面聲明了兩個抽象方法“fun1”和”fun2”,因為接口里面所有的方法都是抽象方法,所以在聲明抽象方法的時候就不用像抽象類那樣使用”abstract”這個關(guān)鍵字了,默認的已經(jīng)加上這個關(guān)鍵字,另外在接口里邊的”public”這個訪問權(quán)限也可以去掉,因為默認就是public的,因為接口里所有成員都要是公有的,所在對于接口里面的成員我們就不能使用“private”的和”protected”的權(quán)限了,都要用public或是默認的。另外在接口里面我們也聲明了一個常量“constant“, 因為在接口里面不能用變量成員,所以我們要使用const這個關(guān)鍵字聲明。
因為接口是一種特殊的抽象類,里面所有的方法都是抽象方法,所以接口也不能產(chǎn)生實例對象; 它也做為一種規(guī)范,所有抽象方法需要子類去實現(xiàn)。
我們可以使用”extends”關(guān)鍵字讓一個接口去繼承另一個接口:
?php
//使用”extends”繼承另外一個接口
interface Two extends One
{
function fun3();
function fun4();
}
?
而我們定義一接口的子類去實現(xiàn)接口中全部抽象方法使用的關(guān)鍵字是”implements”,而不是我們前面所說的”extends”;
代碼
?php
//使用“implements”這個關(guān)鍵字去實現(xiàn)接口中的抽象方法 接口和類之間
class Three implements One
{
function fun1()
{
…
}
function fun2()
{
…
}
}
//實現(xiàn)了全部方法,我們?nèi)タ梢允褂米宇惾嵗瘜ο罅?/p>
$three=new Three();
?
我們也可以使用抽象類,去實現(xiàn)接口中的部分抽象方法,但要想實例化對象,這個抽象類還要有子類把它所有的抽象方法都實現(xiàn)才行;
在前面我們說過,PHP是單繼承的,一個類只能有一父類,但是一個類可以實現(xiàn)多個接口,就相當于一個類要遵守多個規(guī)范,就像我們不僅要遵守國家的法律,如果是在學校的話,還要遵守學校的校規(guī)一樣;
?php
//使用implements實現(xiàn)多個接口
class Four implemtns 接口一, 接口二, ….
{
//必須把所有接口中的方法都要實現(xiàn)才可以實例化對象。
}
?
PHP中不僅一個類可以實現(xiàn)多個接口,也可以在繼承一個類的同時實現(xiàn)多個接口, 一定要先繼承類再去實現(xiàn)接口;
?php
//使用extends繼承一個類,使用implements實現(xiàn)多個接口
class Four extends 類名一 implemtns 接口一, 接口二, ….
{
//所有接口中的方法都要實現(xiàn)才可以實例化對象
………
}
?
可以用curl獲取借樓的信息。
所謂接口,就是提供一個url,只要你滿足它要求的參數(shù),就能得到你要的數(shù)據(jù)。比如你拿到一個接口,帶上所需的參數(shù),復制到地址欄同樣能得到。不過最好用程序得到。file_get_contents也可以用,不過有局限性。所以我建議用curl。給你一個函數(shù),挺好用的。
function request($url,$https=true,$method='GET',$data=null){
$ch = curl_init();//初始化,得到資源
curl_setopt($ch, CURLOPT_URL,$url); //請求數(shù)據(jù)的路徑
curl_setopt($ch, CURLOPT_HEADER,false);//是否輸出頭
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不直接輸出結(jié)果
//curl_setopt ($ch, CURLOPT_SAFE_UPLOAD, 0);//兼容php之后的版本
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //是否驗證主機
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //是否進行證書驗證
}
if($method=='POST'){
curl_setopt($ch, CURLOPT_POST, true); //POST傳輸
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //傳輸數(shù)據(jù)
}
$content_json = curl_exec($ch);
if ($content_json === false) {
return "網(wǎng)絡(luò)請求出錯: " . curl_error($ch);
}
curl_close($ch);
return $content_json;
}
這不難啊, 既然你也有例子了,就再細化一下,比如在結(jié)果輸出后加個表示結(jié)束的變量, 或者加個error數(shù)量的變量,為0則是沒發(fā)生錯誤. 你有什么不明白的?
======
以我做接口的經(jīng)驗,程序主要有幾部分:
1.接收數(shù)據(jù),驗證數(shù)據(jù)合法性
這你已經(jīng)有例子了, 就是用get方法,程序直接接收get的query,而支付寶,銀行那些網(wǎng)關(guān)除了接收這些必要數(shù)據(jù)外,還會和商戶約定一個key,是這字符串, 約定好每次發(fā)送的數(shù)據(jù)通過某種方式,比如連接的方式和這個key組成一個大的字串,再以MD5加密,附上這個hash給接口,用來判斷這個請求的合法性,key是事先約定的,商戶和接口都知道
2.處理數(shù)據(jù)
這個沒什么好說的,數(shù)據(jù)入庫,計算等等
3.返回數(shù)據(jù)
如果是以http協(xié)議的話,就直接輸出header,然后輸出
值名=值+換行符
這樣的數(shù)據(jù)就可以了
銀行接口網(wǎng)關(guān),財付通,支付寶,域名注冊接口我都做過,我只能提示到這里,具體要我做就不是200分的問題了,這需要時間調(diào)試
PHP開發(fā)APP接口需要注意下面問題:
1.制定規(guī)范
開發(fā)前一定要定好一個規(guī)范,比如要定好數(shù)據(jù)返回的通用參數(shù)和格式。關(guān)于數(shù)據(jù)格式,用的比較多的有xml和json,我建議用json,因為json比xml的好處更多。
2.精簡的返回數(shù)據(jù)
接口數(shù)據(jù)因符合需要什么返回什么的原則,比如要查詢某個用戶的余額和注冊時間,網(wǎng)頁里面的做法可能是select * from user where
uid=1,但是接口一定要select balance,regtime from user where
uid=1。因為接口返回數(shù)據(jù)是要有開銷的,要流量的,能少返回數(shù)據(jù)就盡量少返回,這樣可以大大的提高性能。
3.數(shù)據(jù)類型要嚴格
要注意數(shù)據(jù)的類型,整數(shù)類型的數(shù)據(jù)一定要轉(zhuǎn)為int,因為app客戶端開發(fā)的java、object-c語言對數(shù)據(jù)類型比較嚴格,類型不對會照成app閃退。
4.要寫接口文檔
一定要寫好接口文檔,并按照模塊寫,而且還要書寫規(guī)范,最好的格式是:
接口請求地址;請求參數(shù)(包括參數(shù)名、類型、是否必填);測試參數(shù)舉例;返回參數(shù)(參數(shù)名,并注明每個參數(shù)的含義)。
這樣哪怕以后項目很大,以不會照成維護困難的問題。
5.保證代碼正確性
要驗證保證代碼正確無誤,而且生成環(huán)境中要屏蔽掉錯誤,避免頭部有額外的輸出,照成返回的json等數(shù)據(jù)解析失敗而導致app閃退等。
6.要優(yōu)化代碼的性能
app要求響應(yīng)迅速,這樣才能給用戶比較好的體驗感。所以移動接口端在處理業(yè)務(wù)邏輯的時候,要避免不要執(zhí)行太復雜的sql語句,或者含有大量的循環(huán),能做成緩存的盡量做緩存,比如將首頁的熱點模塊信息可以存到redis緩存中。在不考慮網(wǎng)速的情況下,比較理想的接口響應(yīng)時間應(yīng)該是200毫秒以內(nèi)。
7.不要隨意更改舊接口
app不像網(wǎng)頁,app一旦發(fā)布,有人使用之后,接口就不要亂修改了。以后升級也是,修改要在保證接口原有結(jié)構(gòu)之上進行額外的擴展,否則會導致調(diào)用舊版接口的app出現(xiàn)bug。
8. 注意接口的安全
安全高于一切,必須要保證接口的安全。電話號碼等敏感信息在傳輸?shù)倪^程中一定要加密,否則可能會被別人抓包到。拿取用戶信息的接口一定要驗證權(quán)限,以防止接口被惡意調(diào)用,泄密用戶信息,甚至篡改信息。