一步步教你编写不可维护的 PHP 代码

随着失业率愈来愈高,不少人意识到保全本身的工做是多么的重要。那么,什么是保住本身工做,并让本身无可替代的好方法呢?一个很简单的事实是只要你的代码没有人可以维护,那么你就成功保住了工做。编写不可维护的代码是一个特殊的技能,但奇怪的是,彷佛对某些开发者来讲是很天然的。不过对于剩下的开发者来讲,这里有一些技巧和提示来让你开始写不可维护的代码。程序员

首先要作的事情
第一步,从找工做开始。你应该寻找合适的公司,在那里你能够尽情发挥并实现你那不可维护的潜力。 你不必定须要成为公司的 PHP 大牛若是是那更好。找工做时,若是工做描述提到须要从其它的迁移到 PHP (因此你知道你会作主),或者也能够搜索那种须要 10 年 PHP5 工做经验的误导性工做,再加上熟练使用 FrontPage 和 Netscape Composer 。正则表达式

一旦你得到这种百年不遇的机会,从第一天开始就要采起措施。在会议上发言,让你的意见被听到。大胆谈论面向对象的架构设计,企业,改革方案,怎样让够好变得更好,固然你也得作出相应的承诺。确保每一个人在重要的编码环节都咨询你的意见。数据库

不可维护的核心
灵感来源于优秀的文章 “Writing unmaintainable code” (想要保住工做的人必定会看的), 如下是你须要掌握和精通的两个重要概念:编程

你应该让别人没法轻易地修改任何东西,除非他破坏另一些东西。数组

维护人员没有时间去理解你的代码。 可维护的代码意味着可以在堆积如山的代码中快速定位到特定的部分,可以快速明白它是如何工做的而且在不破坏一些东西的状况下进行修改。你不能这样作。 不能让别人能轻易地搜索到某些东西或者在他们期待的地方找到。架构

你的代码不能 “看起来” 不可维护(由于别人会怀疑的), 它必须 “是” 不可维护。框架

代码在维护人员看起来应该是正常的,但要在他们最意想不到的时候给他们一个惊喜。编辑器

最佳实践
禁止代码约定。 关于编码和命名约定的对骂无穷无尽。这样的状况毫不能在你优秀的组织中出现。你有牛逼的项目要作,你不可能花上无数的时间来讨论用 tab 仍是仍是空格。再说了,约定就是限制。若是一个新人入职,而且他不习惯你的约定,他会很痛苦。不快乐的程序员是没有效率的程序员。谁问你你就向他们解释。让每一个人都用他们本身喜欢的风格写代码。至于你本身的代码 - 变换你的约定。周一用 camelCase 小驼峰命名,周二用 all_lowercase 全小写命名,周五混合着用,在每一个 2 月 29 日 使用匈牙利命名法。函数

不写注释。 单元测试

你的代码很优美,它不须要注释。若是有人不理解你的代码,那么颇有可能他们不是那么好的程序员。若是,有这个可能的话,你被强迫要求写注释,那么直接夸张的写。详细描述最明显和最不重要的代码,跳过其它的。

 1 // 下面这一块代码
 2 // 咱们增长两个变量:
 3 // 命名为变量 a 和变量 b
 4 // 两个都是整数
 5 
 6 // 声明变量 a
 7 // 并给它赋值整数 1
 8 $a = 1;
 9 // 声明变量 b
10 $b = 2;
11 // 给变量 a 和 b 求和
12 // 声明和初始化见上面
13 // 而且将结果赋值给
14 // 一个新的变量 c
15 $c = $a + $b;

 

使用记事本编码

 或者使用其余没有代码缩进展现的编辑器。使得其余人忍受痛苦最终离开团队。这样你就不用老是听他们的抱怨了。若是有人问你为何使用记事本,准备好解释:由于它来自于 Windows (当今惟一一个,为富有创造性的程序员准备的操做系统),无需任何须要的培训,也不须要花费任何代价。我相信你能在网上找到你可使用任何程序的参考文献,甚至包括 Word,来编写你的网页代码,可是只有记事本才是真正的权威,毕竟,大家公司雇佣的人只有你才是权威。

拒绝单元测试。 

向任何质疑你的人解释,你是被雇佣过来编写高质量而且没有漏洞的代码的(所以,无需测试)。为何会有头脑正常的人会花时间来写可有可无的测试来证明代码可否正常运行?有些事情在生活中就像 - 天空是蓝色的,太阳从东方升起,你的代码是可以正常运行的,所以很是感谢。继续(就像评论同样,若是被迫接受测试,那么准备好测试那些显而易见的内容而后跳过其余的部分)

不使用模板引擎

 模板引擎可以帮助你区分业务逻辑层与展现层。它能够保证代码的可维护性因此你不能遵照这个规定。PHP 之父 Rasmus Lerdorf 说过:“PHP 就是模板引擎”。即便你无可奈何使用模板引擎,也要找到对应的方法滥用它,例如放一些业务代码在模板中,或者是当心的将 HTML(和 CSS 和 JavaScript)代码混合在数据库访问层中。
通常来讲,尽量在同一行代码中的将你的 PHP,HTML,CSS 和 JavaScript 代码义正词严地混合在一块儿。在 PHP 代码中建立 JavaScript 和带内联样式的 HTML 代码。若是别人问到,告诉他们这种模式叫作 “封装”,你会对你的代码负所有责任。

版本控制。 

虽然这很难避免,可是使本身摆脱任何形式或版本控制很值得尝试。你能够在讨论的时候向你们证实这样作提升了团队成员之间的沟通,而不是去依赖冷血的版本控制软件。若是你没有说服任何人,请不要绝望。 你提交的时候能够不 commit all 。 在本地保留一些本身的代码。这样若是你之外的人试图构建和部署的话,这些小而致命的代码片断将会破坏这个项目。 若是被抓了,就辩解说这些代码还不适合展现,毕竟,你提交了可以教育初级团队的高质量的代码和优秀的解决方案。这些小男孩和小女孩将会仰望着你并充满期待!

构建一个框架。 

而后你不可避免地成为架构师,你的权威毋庸置疑。这样你就能够添加一些秘密约定(固然其中大多数有时是自相矛盾的),即便是最有经验的维护人员也察觉不出。 你的框架将负责全部的事情,不须要任何人费心地去理解它,你们会很开心由于你一我的让开发变得更容易并且提升了整个公司的产能。不要以开源的方式发布你的框架,由于 a) 这个框架是公司的资产并且公司投入了人大量的资金, b) 开源社区会嘲笑你,并且这将成为你虚张声势的结局。

命名相关
你的变量名应该起的神秘一些,最好只有一个字母。 这样谁都没法经过简单的搜索找到须要的内容。

类名和方法最好也使用一个字母来定义

若是你确实想定义一个正常点的名字,那就一直使用它吧 —— 记住,隐藏信息的最好方法就是频繁的使用它。 当重复使用相同名称(称为 “面向对象的编程”)时,若是将圆括号和花括号放在新的一行,这将有助于提升代码的可读性,而且让队友在你的代码中寻找任何东西时,都得重温一下正则表达式。考虑一下吧:

 1 $noodles = 1;
 2 class
 3 noodles
 4 {
 5 var $noodles = 2;
 6 function
 7 noodles
 8 ()
 9 {
10 $noodles['noodles'] = 'noodles';
11 }
12 }
13 function
14 noodles() {
15 return new noodles;
16 }
17 $noodles = noodles();
18 var_dump($noodles);

 

你也可使用奇特的字符集来命名变量。西里尔字母就很是合适,由于有些字母看起来跟罗马字母同样, 但其实不是(全部这些:xopekacMEBCTAKXOPH)。那么下面的输出是:

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

2?若是第二个 alert 以西里尔字母 "a" 开头,则不能够!

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

eval()
可变变量
可变类,好比 $strudels = "noodles"; $noo = new $strudels;
call_user_func()
基本上任何将代码视为字符串的语言结构都是你的好朋友。

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

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

1 function abc(){
2 echo "abc";
3 }
4 AbC();

 

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

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

 

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

控制结构
使用、混合、匹配全部备选的 if,while,for,foreach,switch 语法。若是被问起来,全部的这些,请解释说你正在培训新员工学习真正的语言。

1 if ($a > 5):
2 if ($a > 4) {
3 while ($a > 0):
4 echo --$a;
5 endwhile;
6 }
7 endif;

 

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

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

 

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

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

这是一个开始!这就是今天的所有。我但愿你相信你本身也能作到,你也能够编写不可维护的代码。如今你的将来就在你的手中!固然,你也能够编写可读性比较高的代码,可是冒着被替代的风险。

相关文章
相关标签/搜索