0

0

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

步履不停

步履不停

发布时间:2019-06-10 11:12:51

|

6478人浏览过

|

来源于php中文网

原创

随着失业率越来越高,很多人意识到保全自己的工作是多么的重要。那么,什么是保住自己工作,并让自己无可替代的好方法呢?一个很简单的事实是只要你的代码没有人能够维护,那么你就成功保住了工作。编写不可维护的代码是一个特殊的技能,但奇怪的是,似乎对某些开发者来说是很自然的。不过对于剩下的开发者来说,这里有一些技巧和提示来让你开始写不可维护的代码。

1.jpg

首先要做的事情

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

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

不可维护的核心

灵感来源于优秀的文章 “Writing unmaintainable code” (想要保住工作的人一定会看的), 以下是你需要掌握和精通的两个重要概念:

  1. 你应该让别人无法轻易地修改任何东西,除非他破坏另外一些东西。

    立即学习PHP免费学习笔记(深入)”;

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

  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" 开头,则不可以!

引用相关

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

DM建站系统汽车保养维修HTML5网站模板1.5
DM建站系统汽车保养维修HTML5网站模板1.5

DM建站系统汽车保养维修HTML5网站模板,DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务器

下载
  • 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早已不是十年前的鸟样

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

161

2023.12.25

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

529

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

258

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

763

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

219

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

355

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

244

2023.11.17

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

24

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号