مراجعة الكود في PHP: ما يجب التحقق منه وكيفية تقديم الملاحظات
\n\nمراجعة الكود ليست مجرد إجراء شكلي، بل هي أداة قوية لنمو الفريق وتحسين جودة الكود. بالنسبة لمطوري PHP المبتدئين، غالبًا ما تبدو عملية المراجعة مخيفة: "ماذا لو فاتني خطأ؟"، "كيف أقول لزميلي أن كوده سيء؟". في هذه المقالة، سنشرح ما يجب الانتباه إليه عند فحص كود PHP وكيفية تقديم ملاحظات مفيدة بدلاً من أن تكون مسيئة.
\n\n1. ما يجب التحقق منه في كود PHP: قائمة مراجعة للمراجع المبتدئ
\n\nلنبدأ بالجانب التقني. فيما يلي الفئات الرئيسية التي يجب التحقق منها أثناء مراجعة كود مشروع PHP:
\n\n- \n
- الأمان (Security) — المنطقة الأكثر خطورة. تحقق من عدم وجود حقن SQL، ثغرات XSS، أو بيانات إدخال غير محمية. \n
- الامتثال لمعايير الترميز — PSR-1، PSR-12 (أو معايير فريقك). هذا يضمن سهولة القراءة والتوحيد. \n
- الأداء — تجنب الاستعلامات الزائدة لقاعدة البيانات، والحلقات غير المثلى، والعمليات الثقيلة داخل الحلقات. \n
- الهندسة والمنطق — الالتزام بمبادئ SOLID، DRY، KISS. هل الكود مكرر؟ هل المنطق معقد جدًا؟ \n
- معالجة الأخطاء — هل يوجد try-catch؟ هل يتم تسجيل الاستثناءات بشكل صحيح؟ هل يتم كبت الأخطاء؟ \n
- الكتابة الصارمة للأنواع — هل يستخدم الكود strict_types؟ هل أنواع الوسائط والقيم المُعادة محددة بشكل صحيح؟ \n
إليك مثال على كود سيء وجيد من حيث الأمان:
\n\n<?php\n// سيء: ثغرة حقن SQL\n$query = "SELECT * FROM users WHERE id = " . $_GET['id'];\n$result = mysqli_query($conn, $query);\n\n// جيد: استخدام الاستعلامات المُعدة\n$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");\n$stmt->bind_param("i", $id);\n$id = (int)$_GET['id'];\n$stmt->execute();\n$result = $stmt->get_result();\n?>\n\n2. كيفية تقديم الملاحظات: مبادئ المراجعة البناءة
\n\nالجزء التقني هو نصف المهمة. النصف الآخر هو القدرة على توصيل ملاحظاتك بحيث يرغب مؤلف الكود في تصحيحها، بدلاً من أن يشعر بالإهانة أو الدفاع عن نفسه.
\n\nالقواعد الأساسية للملاحظات:
\n\n- \n
- تحدث عن الكود، وليس عن الشخص. بدلاً من "لقد كتبت كودًا فظيعًا"، قل "هناك ثغرة محتملة هنا، دعنا نناقش كيفية إصلاحها". \n
- استخدم "رسائل الأنا". "أرى أنه قد يحدث خطأ هنا لأن..." يبدو أكثر لطفًا من "لقد أخطأت". \n
- اشرح "لماذا". ليس فقط "استخدم prepared statements"، بل "prepared statements تحمي من حقن SQL لأنها تفصل البيانات عن كود الاستعلام". \n
- اقترح بدائل. بدلاً من "هذا سيء"، أظهر كيف يمكن تحسينه. \n
- امدح الجيد. لا تنسَ الإشارة إلى الحلول الناجحة: "فكرة رائعة لوضع التحقق في كلاس منفصل!". \n
مثال على تعليق بناء:
\n\n<!-- تعليق سيء -->\n<!-- لماذا لا تستخدم الكتابة الصارمة للأنواع؟ هذا أساسي! -->\n\n<!-- تعليق جيد -->\n<!-- أقترح إضافة declare(strict_types=1) في بداية الملف. \nهذا سيجبر PHP على التحقق من الأنواع بشكل صارم ويمنع التحويلات \nالضمنية العشوائية التي قد تؤدي إلى أخطاء. -->\n\n3. الأخطاء النموذجية في كود PHP التي يجب البحث عنها أثناء المراجعة
\n\nإليك قائمة بالمشكلات الشائعة التي تظهر في كود مطوري PHP المبتدئين. انتبه إليها بشكل خاص:
\n\n- \n
- عدم التحقق من صحة بيانات الإدخال. لا تثق أبدًا في $_GET، $_POST، $_REQUEST، $_FILES. \n
- المتغيرات العامة والمصفوفات الشاملة داخل الدوال. هذا ينتهك مبدأ التغليف ويجعل الكود صعب الصيانة.