不久前,我被介紹給Clojure,雖然我沒有完全理解它的所有概念,但它給了我一個替代Java和PHP的OO,我真的想要走向。我認爲Clojure的系統是我的理想。我知道我想盡可能地通知我的PHP編碼風格。我應該遵循什麼原則來在PHP中使用更少的類似Java的對象進行編碼,並且更類似於Clojure的函數式編程原則?
我真的不喜歡PHP中的面向對象,我討厭它常常會導致的樣板量和隱藏的複雜度。與此同時,我可以看到封裝的好處,在這些封裝中,您有多個數據位可以自行修改。也許使用一階函數是允許封裝的主要方式,但除此之外,如何將面向對象的好處轉化爲函數式編程?
現在我遇到的問題的一個部分是如何處理一些相關函數的集合,這些函數可能會被分組到一個類中,以一種讓他們對彼此有用的理智方式。
聽起來很貼切,我試圖找出如何將它翻譯成PHP術語。 我認爲我可能會命令那本書閱讀該部分(以及它的其他部分,這些部分可能不會受到傷害)。 單元測試是一個偉大的觀點,我可以從根本上追求沒有問題。 「不要更改原始數據結構」部分似乎有點棘手在PHP中,因爲我認爲執行一個對象的動作通常通過引用在默認情況下發生在PHP中,雖然也許沒關係?我應該嘗試深入克隆對象以便返回一個全新的副本嗎?並依靠垃圾收集? – Kzqai 2010-08-04 03:24:42
我的PHP非常糟糕,但要回答你的問題,在數據結構中,我會產生一個副本,然後更改數組的值,如下所示:http://pastie.org/1075342數組不是頭等對象在PHP中,它不完全相同,但概念是。再一次,我們的目標是儘可能少地運行,所以第一個問題是:我需要一個對象嗎?但是我將不得不將PHP的實現留給你。 – 2010-08-04 16:30:18
只是將粘貼的代碼存檔以供日後參考: '<?php $ arr = array(「foo」=>「bar」,12 => true); $ arr2 = $ arr; $ arr2 [] =「test」; echo $ arr == $ arr2; #=> false echo $ arr === $ arr2; #=> false ?>' – Kzqai 2010-09-08 15:51:51