2010-02-01 73 views
6

有沒有關於如何開始修復老式風格的PHP腳本的任何建議?如何修復舊的編碼風格的PHP腳本

前幾天我收到了一個開發一個老的PHP項目的提議,老式的我的意思是這個結構沒有使用OOP編碼方法,它沒有一個明確的框架。

我對從哪裏開始感到困惑,並且想知道開發舊腳本的方法。

注意:他們不想花很多錢開始一個新項目。

那麼你會建議什麼方法來更新舊的PHP腳本?

+2

我不認爲非OOP和非框架本身就是一個缺陷。您可以編寫完美的PHP應用程序,而不需要這些應用程序,並且如果應用程序正在運行並且可以合理維護,那麼不使用OOP或框架不是開始更改代碼的好理由。糟糕的安全實踐(例如系統性SQL和HTML注入)和可維護性差(許多PHP應用程序因缺乏評論,動作邏輯與表示不良混合,沒有結構,縮進或一致的做事方式) - 這些都是很好的理由更新/重寫。 – bobince 2010-02-01 23:33:43

+0

我在PHP中編寫了一些東西,我不使用框架或OOP。我認爲框架在一個小應用程序中只是額外的包袱,我從來不關心在PHP中如何處理OOP。但我也不是那種認爲「如果應用程序沒有至少5度繼承的地方,那裏的工作的實際代碼是不正確的」 – Earlz 2010-02-02 01:04:00

回答

2

這取決於你的意思是「老」。舊的爲PHP 4寫?還是老在非OOP? (或者兩者都是?)

老在PHP4:
只要你通過它篩選,要麼抑制警告或實際解決棄用函數調用一切都應該罰款。這只是無聊的工作。簡單而便宜。

舊如非OOP:
一個理論上的發展離不開OOP或明確的MVC(或其它)框架非常穩定的和可擴展的應用程序。事實上,如果應用程序規模較小,則沒有理由添加OOP或框架的意大利麪條和肉丸複雜性。用一些框架重新編寫OOP中的所有內容都很困難而且很昂貴。而且很可能矯枉過正。

+1

它說在問題中沒有OOP 。 – 2010-02-01 23:12:34

1

你可以給我們更多的細節,也許是一個例子。

即使程序代碼也包含OOP元素。您可以識別與同一個實體相關的變量和過程。你可以重寫它,但是他們很難找到它的價值,特別是如果他們節儉的話,正如你所建議的那樣。

0

也許你的代碼現在看起來像這樣 alt text

而且你想,它看起來像這樣

alt text

那麼,如果它只是一個腳本,而不是整個項目,我將其轉換到OOP編碼標準。

+0

PHP甚至有一個'goto'關鍵字嗎? – Earlz 2010-02-02 01:05:06

3

Joel Spolsky writes:

「[網景做出]單最壞的戰略失誤,任何軟件公司可以:他們決定重寫了代碼。」

因此,無論您的行動方針如何,優先考慮的是使用現有的代碼。重構將是您可以使用的最佳方法之一。

如果代碼庫沒有更新,你絕對必須做什麼?您需要爲該行動升級多少和什麼特別的東西纔有可能?考慮這兩個問題。

1

當我這樣做時,這是一個多步驟的過程。通常情況下,現有產品需要繼續運行。從頭開始重寫很少是一種選擇,即使你最終完成了它。

  • 開始拋棄手冊包含語句和實施自動加載磁帶機,如果可能的話(需要許多次)
  • 創建一個腳本來模擬魔術引號&註冊全局。這樣可以在PHP中關閉它,同時保持現有代碼運行
  • 如果適用,逐漸刪除過多的strip_slashes或add_slashes調用。幫助程序腳本允許您爲每個文件執行此操作。
  • 確保您的變量具有適當的範圍
  • 分開您的演示文稿代碼。考慮Smarty的或備用模板系統
  • 移動DB調用PDO和使用參數替代的一切
  • 看代碼,想想刪空前端控制器

然後我看項目,並確定我將如何改變邏輯本身。通常,如果沒有函數,我的第一遍是將常見行爲包裝爲靜態方法。沒有太多的努力獲得儘可能多的重用,所以我不關心組織。

冗餘度降低後,我就組織起來了。正是在這個階段,我開始計劃我的班級模型,並將這些功能重構爲乾淨的方法。這也是自動化測試(phpunit)的時間。一旦我相當有信心,我添加一些控制器並整合模板,然後我完成了......除了一兩個更多的通行證。

對我來說,這是關於識別我在哪裏,我想在哪裏,並制定一個可以在幾個小步驟中執行的計劃。每個人都有自己的目標,所以除了自己的目標之外,沒有任何魔法計劃可以遵循。

+0

我喜歡這個答案,它的東西:D告訴我更多關於PDO的信息 – Ghazanfari 2010-02-02 06:44:37

+0

PDO是PHP的OOP數據庫庫。它提供了迭代器,預處理語句和一致的接口。 http://php.net/PDO – pestilence669 2010-02-03 21:40:33

0

閱讀他們的代碼。與他們交談。

根據現有代碼查看請求的更改。與他們交談。

決定你改變多少隻想做什麼。與他們交談。

這樣做。與他們交談。

當他們要求通過重寫而不是通過修改可以更容易完成的功能時,請執行此操作。

使用可協助重構的IDE。

+0

所以你建議我跟那些愚蠢的商人交談,我的主要目標是確保這個項目,並以一種可以穩定項目的方式開發它 – Ghazanfari 2010-02-02 06:41:04

+0

你絕對不能這樣做沒有他們的支持。你提到了一些關於「注意:他們不想花大錢開始一個新項目。」這種活動主要是項目管理而不是編程。順便說一句:如果他們有錢花在編程上,並且知道不要花太多錢,他們不可能是「愚蠢的商人」!小心被視爲不能做出簡單改變的「愚蠢的程序員」。 – Don 2010-02-02 15:42:06