我在php 7中使用返回型別提示遇到了問題。我的理解是,提示self意味著您打算讓實現類返回自身。 因此,我在介面中使用了self來表明這一點,但是當我嘗試實際實現介面時,出現了相容性錯誤。
以下是我遇到的問題的簡單演示:
inte***ce ifoo
public function bar (string $baz) : self;
class foo implements ifoo
public function bar (string $baz) : self
echo $baz . php_eol;
return $this;
(new foo ()) -> bar ("fred")
-> bar ("wilma")
-> bar ("barney")
-> bar ("betty");
預期輸出為:
弗雷德 威爾瑪 巴尼 貝蒂
我實際上得到的是:
php致命錯誤:foo :: bar(int $ baz)的宣告:foo必須與ifoo :: bar(int $ baz):第7行的test.php中的ifoo相容
事情是foo是ifoo的實現,據我所知,該實現應該與給定的介面完全相容。 我大概可以通過更改介面或實現類(或兩者)以按名稱返回提示介面的方式來代替使用self來暗示該介面,從而解決此問題,但我的理解是self的語義是「返回您剛剛稱為的類的例項 方法」。 因此,從理論上講,將其更改為介面意味著我可以返回任何實現介面的東西的例項,而當我的意圖是要返回的例項時。
這是php的疏忽,還是故意的設計決策? 如果是前者,那麼有沒有機會在php 7.1中看到它的修復? 如果不是,那麼暗示您的介面希望您返回剛剛呼叫方法進行鏈結的例項的正確返回方法是什麼?
java學習(7) 介面
介面定義的是一種抽象的規範,介面裡不能包含構造器和初始化塊的定義。介面裡可以包含成員變數 只能是靜態常量 方法 抽象方法 類方法 或者預設方法 內部類。介面裡定義的方法只能是抽象方法 類方法 或者預設方法,定義介面裡的普通方法總是預設使用public abstract修飾,所以介面裡的普通方法不能有...
PHP 對接快遞100介面(基礎介面查詢封裝)
記錄一下php 對接快遞100介面 基礎介面查詢 namespace class courier params array com com 快遞公司編碼 num num 快遞單號 phone phone 手機號 from from 出發地城市 to to,目的地城市 resultv2 resultv...
PHP物件導向05 介面與多型
抽象類與介面 2014 9 2 9 14 32 摘要 1 抽象類 abstract 2 介面 inte ce 3 多型的應用 1 抽象類 abstract 特點 1 抽象類使用abstract關鍵字申明 2 抽象類中可以沒有抽象方法 3 任何乙個類,如果它裡面至少有乙個抽象方法,那麼這個類就必須被宣...