国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP|Trait實踐

BothEyes1993 / 2515人閱讀

摘要:完成一部分接口的功能,同時也完成一部分父類的功能。這時,兩個類有了同樣的功能獲取當前對象的經緯度屬性。因為這兩個類確實是完全不相關的,并不應該繼承同一祖先。創建接口,讓這兩個類均實現這兩個接口。

trait完成一部分接口的功能,同時也完成一部分父類的功能。

舉個例子來說明trait的需求場景:

當有兩個class:RetailStore和Car類,這兩個類,他們并不繼承同一個父類,是兩個不同的子類。現在有一個需求,需要這兩個類都顯示他們的經緯度屬性。這時,兩個類有了同樣的功能:獲取當前對象的經緯度屬性。

解決這個問題有3個辦法:

創建一個父類Geocodable,讓兩者都繼承該類。然而這種方法并不好。因為這兩個類確實是完全不相關的,并不應該繼承同一祖先。

創建Geocodable接口,讓這兩個類均實現這兩個接口。這種方法相對好一點,兩個類均能保持自己的繼承層次接口,只在當前的這兩個類中實現這個接口,完成相同的功能。但是,我們要在這兩個類中實現相同的功能,代碼有重復,這樣并不好。

最好的辦法:創建Geocodabletrait,定義并實現經緯度相關方法,然后把在RetailStore和Car兩個類中混入這個trait。這么做,即不會破壞繼承層次結構,同時又實現復用。

創建Trait

定義trait:

geocoder = $geocoder;
    }
    
    public function setAddress($address)
    {
        $this->address = $address;
    }
    
    public function getLatitude()
    {
        if (isset($this->geocoderResult) === false) {
            $this->geocodeAddress();
        }
        
        return $this->geocoderResult->getLatitude();
    }
    
    public function getLongitude()
    {
        if (isset($this->geocoderResult) === false) {
            $this->geocodeAddress();
        }
        
        return $this->geocoderResult->getLonnitude();
    }
    
    protected function geocodeAddress()
    {
        $this->geocoderResult = $this->geocoder->geocode($this->address);
        
        return true;
    }
} 
如何使用

class RetailStore
{
    use Geocodable;
}

這樣,每一個RetailStore類都可以使用Geocodable的特性了。

setAddress("your set address");
$store->setGeocoder($geocoder);

$latitude = $store->getLatitude();
$longitude = $store->getLongitude();
echo $latitude, ":", $longitude;

參考

Modern PHP

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21651.html

相關文章

  • PHP相關

    摘要:的機器學習庫的機器學習庫,包括算法交叉驗證神經網絡等內容。在即將到來的大會上,她將和大家分享在機器學習領域的全新可能。入門總結入門相關,如安裝配置基本使用等。 基于 Swoole 開發 PHP 擴展 Swoole-1.9.7 增加了一個新特性,可以基于 Swoole 使用 C++ 語言開發擴展模塊,在擴展模塊中可以注冊 PHP 內置函數和類。現在可以基于 Swoole 來編寫 PHP ...

    lewinlee 評論0 收藏0
  • 【Laravel】Laravel 框架關鍵技術解析·讀書筆記(一)

    摘要:判斷是否存在構造函數,不存在直接實例化,存在則通過來獲取輸入函數,并有相應的方法解決依賴參數問題,實現依賴注入。 Laravel 框架關鍵技術解析·讀書筆記(一) 第一章 入口文件 請求訪問的入口文件,主要完成幾部分工作,分別是: 自動加載函數的添加 服務器實例化與服務注冊 路由加載 請求實例化與路由分發 相應生成與發送 其中,自動加載函數用于包含引用文件,改文件是composer...

    CocoaChina 評論0 收藏0
  • PHP 特性之 trait (一)

    摘要:在閱讀文檔的時候看到一個類是以聲明的。是一種代碼復用技術,為的單繼承限制提供了一套靈活的代碼復用機制。下面把的代碼做一個修改以上代碼會輸出。可以看出優先級的順序為,當前類的優先級基類。 ??在閱讀laravel文檔的時候看到一個類 是以 Trait聲明的。平時在工作中從來沒有用過,于是就去看了下官方文檔。原來這個類早在php5.4.0就有了。可惜在項目中從來沒有用過。 ??Trait看...

    ermaoL 評論0 收藏0
  • 關于PHPTrait特性

    摘要:關于作者程序開發人員,不拘泥于語言與技術,目前主要從事和前端開發,使用和,端使用混合式開發。和組合的語義定義了一種減少復雜性的方式,避免傳統多繼承和類相關典型問題。它為傳統繼承增加了水平特性的組合也就是說,應用的幾個之間不需要繼承。 關于作者 程序開發人員,不拘泥于語言與技術,目前主要從事PHP和前端開發,使用Laravel和VueJs,App端使用Apicloud混合式開發。合適和...

    wind3110991 評論0 收藏0
  • php 代碼復用機制--traits

    摘要:是一種為類似的單繼承語言而準備的代碼復用機制。因為中的變量環境是基于函數的,所以會輸出博客鏈接代碼復用機制,本文后續如有更新將會在博客更新。 提到 php 的代碼復用,我們可能第一時間會想到繼承,但是這種單繼承語言一旦派生的子類過多,那么會產生一系列的問題,比如依賴父類、耦合性太大、破壞了類的封裝性。那么有沒有更好的方法來實現代碼復用呢? 自 PHP 5.4.0 起,PHP 實現了另外...

    yedf 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<