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

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

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

ابدأ الدورة

Clean Code في PHP: المبادئ والأمثلة التطبيقية

\n

الكود النظيف ليس رفاهية، بل ضرورة لأي مطور PHP محترف. عندما تكتب كودًا يسهل قراءته وفهمه وتعديله، فإنك توفر الوقت لنفسك ولفريقك. في هذا المقال، سنشرح المبادئ الأساسية لـ Clean Code في PHP مع أمثلة محددة يمكن تطبيقها فورًا في المشاريع.

\n\n

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

\n

PHP لغة مرنة، لكن هذه المرونة غالبًا ما تؤدي إلى الفوضى إذا لم يتم الاهتمام بجودة الكود. يساعد الكود النظيف في:

\n
    \n
  • العثور على الأخطاء وإصلاحها بشكل أسرع؛
  • \n
  • إضافة وظائف جديدة بسهولة دون خطر كسر المنطق الحالي؛
  • \n
  • تقليل وقت الاندماج في المشروع للمطورين الجدد؛
  • \n
  • زيادة الاستقرار العام للتطبيق.
  • \n
\n

دعنا ننتقل إلى المبادئ والأمثلة المحددة.

\n\n

أسماء المتغيرات والدوال الصحيحة

\n

الخطوة الأولى نحو الكود النظيف هي الأسماء ذات المعنى. يجب أن يجيب الاسم على سؤال "ما هذا؟" أو "ماذا يفعل؟".

\n\n

مثال سيء

\n
<?php\n$a = 86400;\n$b = $a * 7;\n$c = $b * 0.8;
\n\n

مثال جيد (Clean Code)

\n
<?php\n$secondsPerDay = 86400;\n$weeklySeconds = $secondsPerDay * 7;\n$discountedWeeklySeconds = $weeklySeconds * 0.8;
\n\n

المبدأ: يجب أن تكون الأسماء وصفية ولا تحتاج إلى تعليقات. تجنب الاختصارات (باستثناء الشائعة مثل $i لعداد الحلقة).

\n\n

مثال للدوال

\n
<?php\n// سيء\nfunction calc($a, $b) {\n    return $a + $b * 1.2;\n}\n\n// جيد\nfunction calculateTotalWithTax(float $price, float $taxRate = 0.2): float {\n    return $price * (1 + $taxRate);\n}
\n\n

مبدأ المسؤولية الواحدة (SRP) في الفئات

\n

أحد مبادئ SOLID ينص على: "يجب أن يكون للفئة سبب واحد فقط للتغيير". هذا يعني أن كل فئة يجب أن تكون مسؤولة عن مهمة واحدة محددة.

\n\n

انتهاك مبدأ SRP

\n
<?php\nclass OrderProcessor {\n    public function process(Order $order) {\n        // التحقق من صحة الطلب\n        if (empty($order->items)) {\n            throw new Exception("طلب فارغ");\n        }\n        \n        // الحفظ في قاعدة البيانات\n        $this->saveToDatabase($order);\n        \n        // إرسال البريد الإلكتروني\n        mail($order->email, "تم تأكيد الطلب", "شكرًا لشرائك!");\n        \n        // إنشاء فاتورة PDF\n        $this->generateInvoice($order);\n    }\n}
\n\n

تنفيذ نظيف مع مبدأ SRP

\n
<?php\nclass OrderValidator {\n    public function validate(Order $order): void {\n        if (empty($order->items)) {\n            throw new Exception("طلب فارغ");\n        }\n    }\n}\n\nclass OrderRepository {\n    public function save(Order $order): void {\n        // منطق الحفظ في قاعدة البيانات\n    }\n}\n\nclass EmailNotifier {\n    public function sendOrderConfirmation(Order $order): void {\n        mail($order->email, "تم تأكيد الطلب", "شكرًا لشرائك!");\n    }\n}\n\nclass InvoiceGenerator {\n    public function generate(Order $order): string {\n        // إنشاء PDF\n        return "invoice_".$order->id.".pdf";\n    }\n}\n\n// الاستخدام\nclass OrderProcessor {\n    public function __construct(\n        private OrderValidator $validator,\n        private OrderRepository $repository,\n        private EmailNotifier $notifier,\n        private InvoiceGenerator $invoiceGenerator\n    ) {}\n    \n    public function process(Order $order): void {\n        $this->validator->validate($order);\n        $this->repository->save($order);\n        $this->notifier->sendOrderConfirmation($order);\n        $this->invoiceGenerator->generate($order);\n    }\n}
\n\n

الآن كل فئة مسؤولة عن مجال مسؤوليتها الخاص، مما يبسط الاختبار والصيانة.

\n\n

تجنب "الأرقام السحرية" والتكرار

\n

المدونات

توصيات الكتب