译者注:这是一篇很棒文章,使用有趣的叙述方式,从反面讲解了做为一个优秀的 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 知识社区