首页 后端开发 php教程 掌握 PHP 中的简洁代码:我的编码之旅的主要经验教训

掌握 PHP 中的简洁代码:我的编码之旅的主要经验教训

Sep 26, 2024 am 06:31 AM

Mastering Clean Code in PHP: Key Lessons from My Coding Journey

“掌握 PHP 中的干净代码:我的编码之旅的重要经验教训”重点介绍实用的实践规则和示例,以帮助 PHP 开发人员编写干净、可维护且高效的代码。在这里,我们将把这些基本规则分解为易于理解的部分,每个部分都附有一个示例。

1. 有意义的名字

  • 规则:为变量、函数和类使用清晰且描述性的名称。
  • 为什么:这使您的代码更易于理解和维护。

示例:

   // BAD:
   $x = 25;
   function d($a, $b) {
       return $a + $b;
   }

   // GOOD:
   $age = 25;
   function calculateSum($firstNumber, $secondNumber) {
       return $firstNumber + $secondNumber;
   }
登录后复制

描述

  • 避免使用单字母变量,例如 $x 或 $d。相反,请使用描述性名称,例如 $age 或calculateSum。
  • 清晰的名称使您的意图明确,帮助当前和未来的开发人员理解代码的用途。

2. 单一责任原则(SRP)

  • 规则:一个函数或类应该只有一个改变的理由,这意味着它应该只做一件事。
  • 为什么:这使您的代码更加模块化并且更容易重构。

示例:

   // BAD:
   class Order {
       public function calculateTotal() {
           // logic to calculate total
       }

       public function sendInvoiceEmail() {
           // logic to send email
       }
   }

   // GOOD:
   class Order {
       public function calculateTotal() {
           // logic to calculate total
       }
   }

   class InvoiceMailer {
       public function sendInvoiceEmail() {
           // logic to send email
       }
   }
登录后复制

描述

  • BAD 示例中,Order 类负责计算总数并发送电子邮件。这违反了 SRP,因为它有两个责任。
  • GOOD示例中,我们通过创建负责电子邮件任务的 InvoiceMailer 类来分离关注点,使每个类更易于管理和更新。

3. 保持函数较小

  • 规则:函数应该做一件事并且做好它。将大函数分解为更小的函数。
  • 为什么:小函数更容易理解、测试和维护。

示例:

   // BAD:
   function processOrder($order) {
       // Validate order
       if (!$this->validateOrder($order)) {
           return false;
       }

       // Calculate total
       $total = $this->calculateTotal($order);

       // Send invoice
       $this->sendInvoiceEmail($order);

       return true;
   }

   // GOOD:
   function processOrder($order) {
       if (!$this->isOrderValid($order)) {
           return false;
       }

       $this->finalizeOrder($order);
       return true;
   }

   private function isOrderValid($order) {
       return $this->validateOrder($order);
   }

   private function finalizeOrder($order) {
       $total = $this->calculateTotal($order);
       $this->sendInvoiceEmail($order);
   }
登录后复制

描述

  • BAD 示例中,processOrder 函数尝试执行所有操作:验证、计算和发送发票。
  • GOOD 示例中,我们将任务分解为更小、更集中的方法(isOrderValid、finalizeOrder),从而提高了可读性和可重用性。

4. 避免使用幻数和字符串

  • 规则:用命名常量替换“神奇”数字和字符串。
  • 为什么:这提高了可读性并使代码更容易修改。

示例:

   // BAD:
   if ($user->age > 18) {
       echo "Eligible";
   }

   // GOOD:
   define('MINIMUM_AGE', 18);

   if ($user->age > MINIMUM_AGE) {
       echo "Eligible";
   }
登录后复制

描述

  • BAD 示例中,数字 18 是一个“神奇数字”。在分析上下文之前,你不知道它代表什么。
  • GOOD 示例中,使用 MINIMUM_AGE 使意图变得清晰,并允许您在一个位置更改值而无需搜索代码库。

5. DRY(不要重复自己)

  • 规则:避免重复代码。尽可能重用函数或类。
  • 为什么:重复的代码更难维护并且更容易出现错误。

示例:

   // BAD:
   $total = $itemPrice * $quantity;
   $finalPrice = $total - ($total * $discountRate);

   $cartTotal = $cartItemPrice * $cartQuantity;
   $finalCartPrice = $cartTotal - ($cartTotal * $cartDiscountRate);

   // GOOD:
   function calculateFinalPrice($price, $quantity, $discountRate) {
       $total = $price * $quantity;
       return $total - ($total * $discountRate);
   }

   $finalPrice = calculateFinalPrice($itemPrice, $quantity, $discountRate);
   $finalCartPrice = calculateFinalPrice($cartItemPrice, $cartQuantity, $cartDiscountRate);
登录后复制

描述

  • BAD示例中,价格计算逻辑是重复的。
  • GOOD示例中,我们创建了一个可重用的函数calculateFinalPrice以避免重复并使代码更易于维护。

6. 使用保护子句来减少嵌套

  • 规则:不使用深层嵌套的if语句,而是提前返回以简化结构。
  • 为什么:保护子句消除了不必要的嵌套,使代码更干净、更易于遵循。

示例:

   // BAD:
   function processPayment($amount) {
       if ($amount > 0) {
           if ($this->isPaymentMethodAvailable()) {
               if ($this->isUserLoggedIn()) {
                   // Process payment
               }
           }
       }
   }

   // GOOD:
   function processPayment($amount) {
       if ($amount <= 0) {
           return;
       }
       if (!$this->isPaymentMethodAvailable()) {
           return;
       }
       if (!$this->isUserLoggedIn()) {
           return;
       }

       // Process payment
   }
登录后复制

描述

  • BAD示例中,逻辑嵌套很深,导致阅读起来更加困难。
  • GOOD 示例中,保护子句用于在不满足条件时提前返回,从而扁平化结构并使代码更清晰。

7. 评论“为什么”,而不是“什么”

  • 规则:编写注释来解释为什么会发生某些事情,而不是解释正在发生的事情(这应该从代码中清楚地看出)。
  • 为什么:注释应该提供超越显而易见的价值,有助于解释代码背后的意图和推理。

示例:

   // BAD:
   // Increment age by 1
   $age++;

   // GOOD:
   // User's birthday has passed, increase age by 1
   $age++;
登录后复制

描述

  • The BAD comment simply restates what the code does, which is obvious from the code itself.
  • The GOOD comment explains why we are incrementing the age, adding meaningful context.

8. Refactor for Clarity

  • Rule: Continuously refactor to improve code clarity and simplicity.
  • Why: Clean code is achieved through constant refactoring to ensure that it is always readable, efficient, and maintainable.

Example:

   // Before Refactoring:
   function getDiscountedPrice($price, $isHoliday) {
       if ($isHoliday) {
           return $price * 0.9;
       } else {
           return $price;
       }
   }

   // After Refactoring:
   function getDiscountedPrice($price, $isHoliday) {
       return $isHoliday ? $price * 0.9 : $price;
   }
登录后复制

Description:

  • Refactoring transforms long-winded code into more concise, elegant versions without losing clarity. In this example, we simplified an if-else structure using a ternary operator.

These essential rules—derived from the journey of coding cleanly in PHP—make your code more readable, maintainable, and scalable. By applying these principles consistently, you ensure that your code is easy to understand and modify over time, regardless of the complexity of your projects.

以上是掌握 PHP 中的简洁代码:我的编码之旅的主要经验教训的详细内容。更多信息请关注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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在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中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

在PHPStorm中如何进行CLI模式的调试? 在PHPStorm中如何进行CLI模式的调试? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

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

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

See all articles