2010-09-04 39 views
2

我正在專門討論可應用於屬性和方法的公共,私有和受保護關鍵字。我到處尋找,我知道他們在做什麼以及如何使用它們,但是沒有看到它們在編程時如何實用。有人可以解釋或舉例嗎?PHP:封裝的目的是什麼?

回答

7

封裝(範圍)的主要目的是確保您編寫不能被破壞的代碼。這適用於一般範圍,所以讓我用一個局部變量的一個簡單的例子在函數內部:

function xyz ($x) { 
    $y = 1; 
    while ($y <= 10) { 
    $array[] = $y * $x; 
    $y++; 
    } 
    return $array; 
} 

該功能的目的是傳遞一個號碼,返回數組。示例代碼非常基本。爲了使函數xyz()可靠,你需要保證它每次都做完全一樣的事情。那麼如果某人有能力從外部改變$ y或$ array的初始值呢?甚至$ x?如果你能夠從函數之外做到這一點,那麼你不能再保證函數返回的是什麼。

這就是範圍(封裝)發揮作用的地方。這是一種設置邊界的方法,可以爲變量(和函數,屬性,方法,對象)分配可以和不可以執行的操作的權限,以確保代碼的位數始終與預期的完全一致。

拿任何內置的PHP函數,如... strtolower()或preg_match()或...以及任何東西。他們期望將論據傳遞給他們,並且他們返回具體的東西。內部有變量,循環等等來接受輸入並吐出輸出。如果你能夠從外部改變這些東西,那麼將無法保證strotolower()會返回一個你提供它的小寫字符串,並且這會破壞具有可重用代碼塊的目的。

當你爲自己編程時,這並不一定是有用的,但是當你編寫代碼被許多人使用和共享時,特別是使用涉及插件/插件等的代碼時......它是對於確保您的代碼執行它應該做的事情非常寶貴,並且以預期的方式被訪問/使用/調用。

1

私有/受保護的方法用於編譯語言,如C++和Java。如果代碼編譯爲腳本形式,則這些規則是可執行的。在這些語言中,特別可以隱藏繁瑣的內部或機器級別的實現。

PHP只具有這些功能,因爲它的開發人員認爲缺乏受保護/私有方法是指當人們將PHP4推導爲不適合面向對象的語言時。
在PHP中使用封裝作爲設計概念是無可爭議的。然而,使用這些語言結構並不是必須的,並且無論如何都可以在源代碼中輕鬆地刪除。但是,代替適當的庫文檔或者如果coprogrammer不尊重編碼風格,限制訪問是有用的。

因此,總之:技術用例微薄,鼓勵使用指定的接口來抽象過程沒問題。然而,通常設計API的方式使得所有所需的功能和數據易於使用,這樣更加有意義,因此訪問無關內部的嘗試被減少了。你越暴露,越難以改變內部處理。您公開的內在數據越多,出現越少的變通方法或複雜的對象結構。

0

我覺得格雷迪Booch的概括起來相當不錯:

「封裝用於抽象的合同接口及其實現分離」

0

,你可以找到在同一個here一個很好的討論。雖然它與.net(不在PHP)中有關,但仍然是一個相當普遍的討論,其中還包括對維基百科文章的討論。