首頁  >  文章  >  一步一步教你寫不可維護的 PHP 程式碼

一步一步教你寫不可維護的 PHP 程式碼

步履不停
步履不停原創
2019-06-10 11:12:515975瀏覽

隨著失業率越來越高,很多人意識到保全自己的工作是多麼的重要。那麼,什麼是保住自己工作,讓自己無可取代的好方法呢?一個很簡單的事實是只要你的程式碼沒有人能夠維護,那麼你就成功保住了工作。編寫不可維護的程式碼是一個特殊的技能,但奇怪的是,似乎對某些開發者來說是很自然的。不過對於剩下的開發者來說,這裡有一些技巧和提示來讓你開始寫不可維護的程式碼。

一步一步教你寫不可維護的 PHP 程式碼

首先要做的事情

第一步,從找工作開始。你應該尋找合適的公司,在那裡你可以盡情發揮並實現你不可維護的潛力。你不一定需要成為公司的 PHP 大牛如果是那更好。找工作時,如果工作說明提到需要從其它的遷移到PHP (所以你知道你會做主),或者也可以搜尋那種需要10 年PHP5 工作經驗的誤導性工作,再加上熟練使用FrontPage 和Netscape Composer 。

一旦你獲得這種千載難逢的機會,從第一天開始就要採取措施。在會議上發言,讓你的意見被聽見。大膽談論物件導向的架構設計,企業,改革方案,怎麼讓夠好變得更好,當然你也得做出相應的承諾。確保每個人在重要的程式碼環節都諮詢你的意見。

不可維護的核心

靈感來自優秀的文章“Writing unmaintainable code” (想要保住工作的人一定會看的), 以下是你需要掌握和精通的兩個重要概念:

  1. 你應該讓別人無法輕易地修改任何東西,除非他破壞另外一些東西。

    維護人員沒有時間去理解你的程式碼。可維護的程式碼意味著能夠在堆積如山的程式碼中快速定位到特定的部分,能夠快速明白它是如何工作的並且在不破壞一些東西的情況下進行修改。你不能這樣做。不能讓別人能輕易地搜尋到某些東西或在他們期待的地方找到。

  2. 你的程式碼不能 「看起來」 不可維護(因為別人會懷疑的), 它必須 「是」 不可維護。

    程式碼在維護人員看起來應該是正常的,但要在他們最意想不到的時候給他們一個驚喜。

最佳實務

  1. 禁止程式碼約定。 關於編碼和命名約定的對罵無窮無盡。這樣的情況絕對不能出現在你優秀的組織中。你有牛逼的項目要做,你不可能花上無數的時間來討論用 tab 還是還是空格。再說了,約定就是限制。如果有新人入職,而他不習慣你的約定,他會很痛苦。不快樂的程式設計師是沒有效率的程式設計師。誰問你你就向他們解釋。讓每個人都用他們自己喜歡的風格寫程式。至於你自己的代碼 - 變換你的約定。週一以 camelCase 小駝峰命名,週二以 all_lowercase 全小寫命名,週五混合著用,在每個 2 月 29 日 使用匈牙利命名法。

  2. 不寫註解。  你的程式碼很優美,它不需要註解。如果有人不理解你的程式碼,那麼很有可能他們不是那麼好的程式設計師。如果,有這個可能的話,你被強迫要求寫註釋,那麼直接誇張的寫。詳細描述最明顯和最不重要的程式碼,跳過其它的。

  3. 使用記事本編碼。 或使用其他沒有程式碼縮排展示的編輯器。使得其他人忍受痛苦最終離開團隊。這樣你就不用總是聽他們的抱怨了。如果有人問你為什麼使用記事本,準備好解釋:因為它來自於 Windows (當今唯一一個,為富有創造性的程式設計師準備的作業系統),無需任何必要的培訓,也不需要花費任何代價。我相信你能在網路上找到你可以使用任何程式的參考文獻,甚至包括 Word,來編寫你的網頁程式碼,但是只有記事本才是真正的權威,畢竟,你們公司僱用的人只有你才是權威。

  4. 拒絕單元測試。 向任何質疑你的人解釋,你是被雇用過來編寫高品質且沒有漏洞的程式碼的(因此,無需測試)。為什麼會有頭腦正常的人會花時間來寫無關緊要的測試來證實程式碼能否正常運作?有些事情在生活中就像 - 天空是藍色的,太陽從東方升起,你的程式碼是能夠正常運作的,因此非常感謝。繼續(就像評論一樣,如果被迫接受測試,那麼準備好測試那些顯而易見的內容然後跳過其他的部分)

  5. 不使用模板引擎。 模板引擎能夠幫助你區分業務邏輯層與展示層。它可以保證代碼的可維護性所以你不能遵守這個規定。 PHP 之父 Rasmus Lerdorf 說:「PHP 就是模板引擎」。即使你迫不得已使用模板引擎,也要找到對應的方法濫用它,例如放一些業務代碼在模板中,或者是小心的將 HTML(和 CSS 和 JavaScript)代碼混合在資料庫訪問層中。
    一般來說,盡可能在同一行程式碼中的將你的 PHP,HTML,CSS 和 JavaScript 程式碼理直氣壯地混合在一起。在 PHP 程式碼中建立 JavaScript 和帶有內嵌樣式的 HTML 程式碼。如果別人問到,告訴他們這種模式叫做 “封裝”,你會對你的程式碼負全部責任。

  6. 版本控制。 雖然這很難避免,但是使自己擺脫任何形式或版本控制很值得嘗試。你可以在討論的時候向大家證明這樣做提高了團隊成員之間的溝通,而不是去依賴冷血的版本控制軟體。如果你沒有說服任何人,請不要絕望。你提交的時候可以不 commit all 。在本地保留一些自己的程式碼。這樣如果你以外的人試圖建置和部署的話,這些小而致命的程式碼片段將會破壞這個專案。如果被抓了,就辯解說這些程式碼還不適合展示,畢竟,你提交了能夠教育初級團隊的高品質的程式碼和優秀的解決方案。這些小男孩和小女孩將會仰望你並充滿期待!

  7. 建立一個框架。 然後你不可避免地成為架構師,你的權威毋庸置疑。這樣你就可以添加一些秘密約定(當然其中大多數有時是自相矛盾的),即使是最有經驗的維護人員也察覺不出。你的框架將負責所有的事情,不需要任何人費心去理解它,大家會很開心因為你一個人讓開發變得更容易而且提高了整個公司的產能。不要以開源的方式發布你的框架,因為 a) 這個框架是公司的資產而且公司投入了人大量的資金, b) 開源社區會嘲笑你,而且這將成為你虛張聲勢的結局。

命名相關

你的變數名稱應該要起的神秘一些,最好只有一個字母。這樣誰都無法透過簡單的搜尋找到需要的內容。

類別名稱和方法最好也使用一個字母來定義。如果你確實想定義一個正常點的名字,那就一直使用它吧 —— 記住,隱藏訊息的最好方法就是頻繁的使用它。當重複使用相同名稱(稱為「物件導向的程式設計」)時,如果將圓括號和花括號放在新的一行,這將有助於提高程式碼的可讀性,並且讓隊友在你的程式碼中尋找任何東西時,都得重溫一下正規表示式。考慮一下:

  $noodles = 1;
    class
    noodles
    {
        var $noodles = 2;
        function
            noodles            ()
        {
            $noodles['noodles'] = 'noodles';
        }
    }
    function
        noodles() {
            return new noodles;
        }
    $noodles = noodles();
    var_dump($noodles);

你也可以使用奇特的字元集來命名變數。西里爾字母就非常合適,因為有些字母看起來跟羅馬字母一樣, 但其實不是(所有這些:xopekacMEBCTAKXOPH)。那麼下面的輸出是:

   $alert = 1;
    $аlert = 2;
    echo $alert;

如果第二個 alert 以西里爾字母 "a" 開頭,則不行!

引用相关

即使你非常正常的定义来一些东西,但并不意味着你不能以有趣的方式来使用它。主要的武器有:

  • eval()

  • 可变变量

  • 可变类,比如 $strudels = "noodles"; $noo = new $strudels;

  • call_user_func()

基本上任何将代码视为字符串的语言结构都是你的好朋友。

   // calling abc();
    $z = 'A';
    call_user_func($z .'bC');

大写

字母例子,函数方法名不区分大小写,滥用这个特点。

function abc(){
    echo "abc";}AbC();

另一方面,数组的健(key) 对大小写敏感,也滥用这个特点。

$a['UseConvetionsOnlyTobreakThem'] = 1;if (isset($a['UseConvetionsOnlyToBreakThem'])) {
    // ?? 大写 B !!1!}

重写

在不期望的情况下重写全局变量,尤其是超全局变量。尽早重写 $_GET 数组中的属性,多次重写,$_POST 亦是如此。在 $_REQUEST 上做一些不起眼的重写作为点缀。如果是在 WTF-ed 上,你可以解释是在防止用户输入的 XSS 攻击、注入攻击以及其他的病毒攻击。

控制结构

使用、混合、匹配所有备选的 ifwhileforforeachswitch 语法。如果被问起来,所有的这些,请解释说你正在培训新员工学习真正的语言。

if ($a > 5):
  if ($a > 4) {
      while ($a > 0):
        echo --$a;
      endwhile;
  }endif;

嵌套三元运算符,没有比这个更好、更简洁的代码了。

// 猜猜这里输出什么echo true ? 'true' : false ? 't' : 'f';

在 for 的循环体内,再次增加 $i 以保持所有人的注意。或者,通过不使用 $i 来实现循环增量的惊喜。从不。

嵌套循环、深入,然后突然跳出它们(循环)。像 break 2 和 break 3 这样的代码存粹是为了娱乐,尤其是当混合了奇怪的缩进代码时。

这是一个开始!

这就是今天的全部。我希望你相信你自己也能做到,你也可以编写不可维护的代码。现在你的未来就在你的手中!当然,你也可以编写可读性比较高的代码,但是冒着被替代的风险。

Practice makes perfect.

原文地址:http://www.phpied.com/how-to-write-unmaintainable-php-code-2009/

相关文章推荐:

1.  2019 PHP安全指南

2. PHP早已不是十年前的鸟样

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn