Clean Code في PHP: مبادئ كتابة الكود القابل للقراءة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كود نظيف في PHP: المبادئ والأمثلة



كل مطور PHP واجه موقفًا يصبح فيه الكود الخاص به غير مفهوم بعد بضعة أشهر. وماذا عن كود الآخرين الموروث من الفريق السابق؟ هذا يؤدي إلى أخطاء (bugs)، وفترة تأهيل طويلة للمبتدئين، وعدم الرغبة في إجراء التغييرات. حل هذه المشكلة هو مبادئ Clean Code (الكود النظيف)، التي نشرها روبرت مارتن (العم بوب). في هذه المقالة، سنشرح المبادئ الرئيسية لـ Clean Code فيما يتعلق بـ PHP وننظر في أمثلة محددة.



1. تسمية المتغيرات والدوال والكلاسات



التسمية الصحيحة هي أساس الكود القابل للقراءة. يجب أن يجيب الاسم على الأسئلة: "ما هذا؟" و"لماذا هذا؟". لا تبخل بالحروف من أجل الاختصار.



مثال سيء (كود سيء)

<?phpfunction getData($d, $u) {    $r = [];    foreach ($d as $i) {        if ($i['status'] === 'active' && $i['user_id'] === $u) {            $r[] = $i;        }    }    return $r;}?>


مثال جيد (كود نظيف)

<?phpfunction getActiveOrdersByUser(array $orders, int $userId): array{    $activeOrders = [];    foreach ($orders as $order) {        if ($order['status'] === 'active' && $order['user_id'] === $userId) {            $activeOrders[] = $order;        }    }    return $activeOrders;}?>


قواعد التسمية:

  • المتغيرات — أسماء: $userName، $orderTotal.
  • الدوال — أفعال: calculateTotal()، sendEmail().
  • الكلاسات — أسماء مفردة: UserRepository، OrderProcessor.
  • المتغيرات المنطقية (Boolean) — ابدأ بـ is، has، can: $isActive، $hasPermission.
  • تجنب الاختصارات ($usr)، والترجمة الصوتية (translit) ($sozdanieZakaza)، والمتغيرات المكونة من حرف واحد (باستثناء عدادات الحلقات $i).


2. الدوال: صغيرة وذات مسؤولية واحدة



يجب أن تقوم الدالة بعمل واحد فقط وأن تقوم به بشكل جيد. إذا كانت الدالة تؤدي عدة مهام، فيجب تقسيمها. الحجم المثالي للدالة هو 10–20 سطرًا.



مثال سيء (دالة تفعل كل شيء)

<?phpfunction processOrder(array $orderData): bool{    // التحقق (Validation)    if (empty($orderData['items'])) {        return false;    }    // حساب التكلفة    $total = 0;    foreach ($orderData['items'] as $item) {        $total += $item['price'] * $item['quantity'];    }    // الحفظ في قاعدة البيانات    $sql = "INSERT INTO orders (user_id, total, status) VALUES (?, ?, 'new')";    $stmt = $this->db->prepare($sql);    $stmt->execute([$orderData['user_id'], $total]);    // إرسال البريد الإلكتروني    mail($orderData['email'], 'Order Confirmation', 'Your order is placed');    return true;}?>


مثال جيد (تقسيم إلى دوال صغيرة)

<?phpclass OrderService{    public function processOrder(array $orderData): bool    {        if (!$this->validateOrder($orderData)) {            return false;        }        $total = $this->calculateTotal($orderData['items']);        $orderId = $this->saveOrder($orderData['user_id'], $total);        $this->sendConfirmationEmail($orderData['email']);        return true;    }

private function validateOrder(array $orderData): bool { return !empty($orderData['items']); }

private function calculateTotal(array $items): float { $total = 0; foreach ($items as $item) { $total += $item['price'] * $item['quantity']; } return $total; }

private function s

المدونات

توصيات الكتب