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

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

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

ابدأ الدورة

ما هو الكود النظيف ولماذا هو مهم لمطور PHP؟

\n\n

الكود النظيف (Clean Code) ليس مجرد مصطلح عصري، بل هو فلسفة برمجة تساعد في إنشاء كود مفهوم وسهل الصيانة والتوسع. بالنسبة لمطوري PHP المبتدئين، فإن إتقان مبادئ الكود النظيف هو استثمار في مستقبلهم. الكود النظيف يقلل من عدد الأخطاء، ويسرع العمل الجماعي، ويجعل عملية التطوير أكثر متعة.

\n\n

في هذه المقالة، سنشرح المبادئ الأساسية للكود النظيف في PHP مع أمثلة محددة. ستتعلم كيفية تحويل "كود السباغيتي" الفوضوي إلى برنامج منظم ومفهوم.

\n\n

المبدأ 1: أسماء معبرة للمتغيرات والدوال

\n\n

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

\n\n

مثال سيء:

\n
<?php\n$a = 5;\n$b = 10;\n$c = $a + $b;\n\nfunction calc($x, $y) {\n    return $x * $y;\n}\n?>
\n\n

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

\n
<?php\n$productPrice = 5;\n$taxRate = 10;\n$totalPrice = $productPrice + $taxRate;\n\nfunction calculateTotalWithTax(float $price, float $tax): float {\n    return $price + ($price * $tax / 100);\n}\n?>
\n\n

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

\n
    \n
  • المتغيرات والخصائص — أسماء ($userName، $orderStatus)
  • \n
  • الدوال والطرق — أفعال (getUser()، saveOrder())
  • \n
  • المتغيرات المنطقية — بادئة is، has، can ($isActive، $hasPermission)
  • \n
  • تجنب الاختصارات: $usrAddr ← $userAddress
  • \n
\n\n

المبدأ 2: دوال صغيرة بمسؤولية واحدة

\n\n

يجب أن تقوم كل دالة بشيء واحد فقط. إذا كانت الدالة تؤدي عدة إجراءات، فقم بتقسيمها إلى دوال أصغر. هذا يحسن قابلية القراءة ويبسط الاختبار.

\n\n

مثال سيء (الدالة تقوم بالكثير):

\n
<?php\nfunction processUserData(array $user): void {\n    // التحقق\n    if (empty($user['email'])) {\n        throw new Exception('البريد الإلكتروني مطلوب');\n    }\n    // الحفظ في قاعدة البيانات\n    $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');\n    $stmt = $db->prepare('INSERT INTO users (name, email) VALUES (?, ?)');\n    $stmt->execute([$user['name'], $user['email']]);\n    // إرسال البريد الإلكتروني\n    mail($user['email'], 'مرحباً', 'شكراً لتسجيلك!');\n}\n?>
\n\n

مثال جيد (فصل المسؤوليات):

\n
<?php\nclass UserService\n{\n    private UserValidator $validator;\n    private UserRepository $repository;\n    private EmailService $emailService;\n\n    public function __construct(\n        UserValidator $validator,\n        UserRepository $repository,\n        EmailService $emailService\n    ) {\n        $this->validator = $validator;\n        $this->repository = $repository;\n        $this->emailService = $emailService;\n    }\n\n    public function registerUser(array $userData): User\n    {\n        $this->validator->validate($userData);\n        $user = $this->repository->save($userData);\n        $this->emailService->sendWelcomeEmail($user);\n        return $user;\n    }\n}\n?>
\n\n

علامات أن الدالة تقوم بالكثير:

\n
    \n
  • لا يمكنك إعطاؤها اسمًا بسيطًا
  • \n
  • تحتوي الدالة على أكثر من 20-30 سطرًا
  • \n
  • يوجد في جسم الدالة تعليقات تفصل بين كتل الكود
  • \n
  • تحتوي الدالة على أكثر من 3-4 معاملات
  • \n
\n\n

المبدأ 3: تجنب التداخل العميق و"الأرقام السحرية"

\n\n

التداخل العميق (if داخل if داخل if) هو العدو الرئيسي لقابلية القراءة. استخدم الإرجاع المبكر (early return) واخرج الشروط المعقدة إلى

المدونات

توصيات الكتب