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

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

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

ابدأ الدورة

مقدمة: لماذا "الكود النظيف" ليس مجرد هوس، بل توفير للمال والأعصاب

\n\n

تخيل أنك تفتح مشروع PHP قديم كتبته قبل عام. تفتح ملف index.php، وتجد خليطاً من HTML، استعلامات SQL، أوامر echo، ودوال بأسماء مثل f1(). هل يبدو هذا مألوفاً؟ إذا كان الأمر كذلك، فأنت إما مبتدئ في بداية مشوارك، أو مطور محترف ورث مشروعاً "قديماً".

\n\n

الكود النظيف في PHP ليس موضة أو نزوة من مدير الفريق. إنه أداة توفر الساعات والأعصاب والمال. في هذا المقال، سنشرح كيف تحول كود PHP الخاص بك من "مسودة فوضوية" إلى "نسخة نظيفة" تسعدك أنت وزملاءك. سنتحدث عن معايير PSR، مبادئ SOLID، التسمية الصحيحة، وسنقدم أمثلة عملية. هيا بنا!

\n\n

1. فلسفة الكود النظيف: المبادئ الأساسية

\n\n

قبل أن نغوص في التفاصيل، دعنا نتفق على قواعد اللعبة. الكود النظيف هو الكود الذي:

\n\n
    \n
  • مفهوم بدون تعليقات (رغم أن التعليقات ضرورية أحياناً).
  • \n
  • سهل الاختبار.
  • \n
  • لا يخاف من إعادة الهيكلة.
  • \n
  • يلتزم بأسلوب موحد في جميع أنحاء المشروع.
  • \n
\n\n

روبرت مارتن (العم بوب) قال في كتابه "الكود النظيف": "الطريقة الوحيدة للكتابة بسرعة هي الكتابة بشكل جيد". إذا كنت تكتب بسرعة وبشكل فوضوي، فبعد شهر ستضاعف وقت التصحيح 10 مرات. دعنا نتعلم من أخطاء الآخرين، لا من أخطائنا.

\n\n

2. معايير PSR: خطوتك الأولى نحو النظام

\n\n

في عالم PHP، هناك PSR (PHP Standards Recommendations) وهي توصيات معتمدة من المجتمع. إذا كنت لا تستخدمها، فأنت على الأقل تعقد الحياة على نفسك وزملائك الذين سيقرؤون كودك.

\n\n

2.1 PSR-1 و PSR-12: أسلوب الترميز الأساسي

\n\n

PSR-1 يحدد القواعد العامة، وPSR-12 هو الأسلوب الموسع. إليك بعض النقاط الرئيسية:

\n\n
    \n
  • يجب أن تستخدم الملفات فقط <?php أو <?=.
  • \n
  • ترميز الملفات هو UTF-8 بدون BOM.
  • \n
  • أسماء الفئات يجب أن تكون StudlyCaps (مثل UserController).
  • \n
  • أسماء الدوال والخصائص تكون camelCase (مثل getUserName()).
  • \n
  • المسافات البادئة: 4 مسافات (وليس علامة تبويب!).
  • \n
\n\n

مثال على كود سيء:

\n
<?\nclass user_controller {\n\tfunction Get_User_Name($id) {\n\t\t$name = Db::query("SELECT name FROM users WHERE id=$id");\n\t\treturn $name;\n\t}\n}\n
\n\n

مثال على كود جيد (PSR-12):

\n
<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Controllers;\n\nuse App\\Models\\User;\n\nclass UserController\n{\n    public function getUserName(int $id): ?string\n    {\n        $user = User::find($id);\n        return $user ? $user->getName() : null;\n    }\n}\n
\n\n

هل ترى الفرق؟ الخيار الثاني يُقرأ ككتاب: تفهم فوراً ما تفعله الدالة، وأنواع البيانات التي تستقبلها وتعيدها.

\n\n

2.2 PSR-4: التحميل التلقائي للفئات

\n\n

انسَ استخدام require_once في كل ملف. استخدم Composer و PSR-4. هذا يسمح بتحميل الفئات تلقائياً حسب مساحة الاسم. يجب أن يتطابق هيكل المجلدات مع مساحات الأسماء:

\n\n
src/\n  App/\n    Controllers/\n      UserController.php\n    Models/\n      User.php\n    Services/\n      PaymentService.php\n
\n\n

في ملف composer.json يتم ضبط ذلك بسطر واحد:

\n
{\n    "autoload": {\n        "psr-4": {\n            "App\\\\": "src/"\n        }\n    }\n}\n
\n\n

3. التسمية الصحيحة: كيف لا تسمي متغيراً $a

\n\n

التسمية تمثل 50% من النجاح. اسم المتغير السيء قد يربك حتى العباقرة. دعنا نستعرض الأخطاء الشائعة.

\n\n

3.1 تجنب الاختصارات (إلا الواضحة)

المدونات

توصيات الكتب