這幾天在研究PHP的物件導向,然後拿乙級的題目來練習一下,看看會有什麼差異,之前在用laravel解題時,己經了解了用框架並不一定能讓解題的速度變快,但對於降低錯誤發生,資料和程式分離是有幫助的,這次是嘗試自己建需要的類別,然後再套用到題目中。

在分析過題目後,以乙級的題目來看,最主要的工作還是放在資料庫的行為上,所以我主要是建了一個DB的Class起來,然後把增改刪查的方法寫在裏面,之後只要實例化各個資料表的物件出來使用就可以了;但是只建一個Class來用,其實感受不太到和函式化的差異,但是因為方法是包在物件中,所以命名時不太需要擔心會有重覆的問題。

之後我又想嘗試改成像Laravel那樣的靜態方法及鏈型呼叫,在使用上可以更簡短及優雅,不過在修改時遇到一些問題,花了不少時間排除,雖然這個做法的Class程式碼看起來不太漂亮,但在使用時,比之前使用函式要來得精簡而直覺。

像是分頁這種在很多題目都有出現的應用,我直接在Class中寫了一個方法來專門產生整個相關的HTML碼,直接靜態呼叫就可以看到分頁的頁碼出來了,相較先前需要整段複製貼上,再去改一些內容,這做法的確改善了不少,整個程式碼也精簡許多;最後也利用繼承,在選單的類別中直接新增一個產生選單陣列的方法,這樣就不用在首頁裏去處理主次選單的關係,直接把陣列叫出來使用就可以了。

比較先前的幾個做法,從最原始的直接寫sql語法,再用mysqli_query()去撈資料,到了後來改用PDO及自訂函式來化資料表的操作,再到現在改用物件導向來操作,這樣慢慢進步,感覺是比較紮實的。

不過最後比較整體程式碼的量時,改用物件導向並沒有真的省下很多撰寫程式的時間,反而為了讓Class更通用而花了不少時間在處理例外狀況的判斷上,靜態方法雖然好用,但在繼承時會有一些狀況要處理,不然有可能會發生讀錯資料表的狀況,這是因為靜態成員和靜態方法在記憶體中只有一份,我只是不停的去改寫這個內容,但如果是每個資料表實例化出來就沒這個問題,每個實例化的物件有自己的記憶體位置和空間,不怕衝突,各有利弊,如果只是針對應檢考試,我會比較建議用自訂函式或是做一個純工具化的Class來使用就夠了。

最後修改日期: 2019-04-11

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。