首页 头条 一步步教你编写不可维护的 PHP 代码

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

Jun 10, 2019 am 11:12 AM
php 思想

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

1.jpg

首先要做的事情

第一步,从找工作开始。你应该寻找合适的公司,在那里你可以尽情发挥并实现你那不可维护的潜力。 你不一定需要成为公司的 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 2break 3 这样的代码存粹是为了娱乐,尤其是当混合了奇怪的缩进代码时。

这是一个开始!

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

Practice makes perfect.

原文地址:http://www.phpied.com/how-to-write-unmaintainable-php-code-2009/
登录后复制

相关文章推荐:

1.  2019 PHP安全指南

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

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

我后悔之前不知道的 7 个 PHP 函数 我后悔之前不知道的 7 个 PHP 函数 Nov 13, 2024 am 09:42 AM

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? 什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。