譯者注:這是一篇很棒文章,使用有趣的敘述方式,從反面講解了做爲一個優秀的 PHP 工程師,有哪些事情是你不能作的。請注意哦,此篇文章羅列的行爲,都是你要儘可能避免的。
隨着失業率愈來愈高,不少人意識到保全本身的工做是多麼的重要。那麼,什麼是保住本身工做,並讓本身無可替代的好方法呢?一個很簡單的事實是隻要你的代碼沒有人可以維護,那麼你就成功保住了工做。編寫不可維護的代碼是一個特殊的技能,但奇怪的是,彷佛對某些開發者來講是很天然的。不過對於剩下的開發者來講,這裏有一些技巧和提示來讓你開始寫不可維護的代碼。html
第一步,從找工做開始。你應該尋找合適的公司,在那裏你能夠盡情發揮並實現你那不可維護的潛力。 你不必定須要成爲公司的 PHP 大牛若是是那更好。找工做時,若是工做描述提到須要從其它的遷移到 PHP (因此你知道你會作主),或者也能夠搜索那種須要10年 PHP5 工做經驗的誤導性工做,再加上熟練使用 FrontPage 和 Netscape Composer 。laravel
一旦你得到這種百年不遇的機會,從第一天開始就要採起措施。在會議上發言,讓你的意見被聽到。大膽談論面向對象的架構設計,企業,改革方案,怎樣讓夠好變得更好,固然你也得作出相應的承諾。確保每一個人在重要的編碼環節都諮詢你的意見。程序員
靈感來源於優秀的文章 「Writing unmaintainable code」 (想要保住工做的人必定會看的), 如下是你須要掌握和精通的兩個重要概念:正則表達式
維護人員沒有時間去理解你的代碼。 可維護的代碼意味着可以在堆積如山的代碼中快速定位到特定的部分,可以快速明白它是如何工做的而且在不破壞一些東西的狀況下進行修改。你不能這樣作。 不能讓別人能輕易地搜索到某些東西或者在他們期待的地方找到。數據庫
代碼在維護人員看起來應該是正常的,但要在他們最意想不到的時候給他們一個驚喜。編程
camelCase
小駝峯命名,週二用 all_lowercase
全小寫命名,週五混合着用,在每一個 2 月 29 日 使用匈牙利命名法。不寫註釋。 你的代碼很優美,它不須要註釋。若是有人不理解你的代碼,那麼頗有可能他們不是那麼好的程序員。若是,有這個可能的話,你被強迫要求寫註釋,那麼直接誇張的寫。詳細描述最明顯和最不重要的代碼,跳過其它的。數組
// 下面這一塊代碼 // 咱們增長兩個變量: // 命名爲變量 a 和變量 b // 兩個都是整數 // 聲明變量 a // 並給它賦值整數 1 $a = 1; // 聲明變量 b $b = 2; // 給變量 a 和 b 求和 // 聲明和初始化見上面 // 而且將結果賦值給 // 一個新的變量 c $c = $a + $b;
通常來講,儘量在同一行代碼中的將你的 PHP,HTML,CSS 和 JavaScript 代碼義正詞嚴地混合在一塊兒。在 PHP 代碼中建立 JavaScript 和帶內聯樣式的 HTML 代碼。若是別人問到,告訴他們這種模式叫作「封裝」,你會對你的代碼負所有責任。架構
你的變量名應該起的神祕一些,最好只有一個字母。 這樣誰都沒法經過簡單的搜索找到須要的內容。框架
類名和方法最好也使用一個字母來定義。若是你確實想定義一個正常點的名字,那就一直使用它吧 —— 記住,隱藏信息的最好方法就是頻繁的使用它。 當重複使用相同名稱(稱爲「面向對象的編程」)時,若是將圓括號和花括號放在新的一行,這將有助於提升代碼的可讀性,而且讓隊友在你的代碼中尋找任何東西時,都得重溫一下正則表達式。考慮一下吧:編輯器
$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;
2?若是第二個 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 攻擊、注入攻擊以及其餘的病毒攻擊。
使用、混合、匹配全部備選的if
,while
,for
,foreach
,switch
語法。若是被問起來,全部的這些,請解釋說你正在培訓新員工學習真正的語言。
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
這樣的代碼存粹是爲了娛樂,尤爲是當混合了奇怪的縮進代碼時。
這就是今天的所有。我但願你相信你本身也能作到,你也能夠編寫不可維護的代碼。如今你的將來就在你的手中!固然,你也能夠編寫可讀性比較高的代碼,可是冒着被替代的風險。
更多現代化 PHP 知識,請前往 Laravel / PHP 知識社區