يوم مطور PHP: من الكود إلى الواقع

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

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

ابدأ الدورة

هل يبدأ الصباح بقهوة أم بذعر؟

\n

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

\n\n

08:30 — الدخول إلى منطقة العمليات

\n

يبدأ اليوم بفحص تطبيقات المراسلة والبريد الإلكتروني. لكن لا تتعجل في قراءة كل شيء. مطور PHP المتمرس يفتح أولاً لوحة المراقبة (New Relic, Sentry أو Grafana). إذا تعطلت قاعدة البيانات ليلاً أو زاد زمن استجابة API — فستعرف أنت أولاً. يتحول الصباح إلى إطفاء حرائق.

\n\n

ماذا تفعل إذا كان الإنتاج (Production) معطلاً؟

\n

أولاً — تحقق من الأخطاء في السجلات (logs). الأمر النموذجي للتحليل السريع:

\n
tail -f /var/log/nginx/error.log | grep "PHP Fatal error"
\n

غالباً ما تُحل المشكلة بإعادة تشغيل PHP-FPM أو التحقق من صلاحيات التخزين المؤقت (cache). إذا رأيت هذا في السجلات:

\n
[error] 1234#1234: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Class "App\\Service\\PaymentGateway" not found
\n

...فهذا يعني أن النشر (deploy) الذي تم أمس قد عطّل التحميل التلقائي لـ Composer. الحل: composer dump-autoload وتأكد من وجود جميع الملفات في مكانها.

\n\n

09:00 — الاجتماع اليومي والتخطيط

\n

في الساعة 9 صباحاً — الاجتماع اليومي (Daily stand-up). هنا يشرح مبرمج PHP ما أنجزه أمس، وما يخطط لفعله اليوم، وما إذا كانت هناك عوائق. لا تتردد: إذا علقت في مهمة لأكثر من ساعتين — اطلب المساعدة. هذا أمر طبيعي.

\n

بعد الاجتماع — تحديد الأولويات. افتح Jira/Trello/YouTrack واختر 1-2 مهمة لليوم. الأفضل إنجاز مهمة واحدة بشكل جيد بدلاً من خمس مهام بشكل سطحي.

\n\n

10:00 — الغوص في الكود: العمل على ميزة جديدة

\n

حان وقت العمل العميق. تأخذ مهمة من قائمة المهام المتراكمة (backlog). لنفترض أنك بحاجة لإضافة نقطة نهاية (endpoint) جديدة لواجهة API لعرض قائمة الطلبات مع التقسيم إلى صفحات (pagination). نبدأ ليس من المتحكم (controller)، بل من النموذج (model) والمستودع (repository).

\n\n

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

\n

النهج السيئ — حشر كل شيء في دالة واحدة:

\n
// سيء\npublic function getOrders($userId, $page) {\n    $query = "SELECT * FROM orders WHERE user_id = ? LIMIT ? OFFSET ?";\n    // ... 50 سطراً من SQL والمنطق والعرض\n}
\n

النهج الجيد — فصل المسؤوليات:

\n
// طبقة الخدمة\nclass OrderService {\n    public function __construct(\n        private OrderRepository $repository,\n        private OrderSerializer $serializer\n    ) {}\n    \n    public function getUserOrders(int $userId, int $page, int $perPage): array {\n        $orders = $this->repository->findByUser($userId, $page, $perPage);\n        return array_map(fn($order) => $this->serializer->serialize($order), $orders);\n    }\n}\n\n// المستودع\nclass OrderRepository {\n    public function findByUser(int $userId, int $page, int $perPage): array {\n        $offset = ($page - 1) * $perPage;\n        return Order::where('user_id', $userId)\n                    ->offset($offset)\n                    ->limit($perPage)\n                    ->get()\n                    ->toArray();\n    }\n}
\n

مثل هذا الكود سهل الاختبار والصيانة والتوسيع. هذه هي احترافية مطور PHP.

\n\n

12:00 — الغداء وتغيير السياق

\n

الغداء مقدس. لا تأكل أمام لوحة المفاتيح. اخرج إلى الشارع، اقرأ كتاباً أو شاهد فيديو عن الهندسة المعمارية. الدماغ يحتاج للراحة. بعد الغداء — وقت المهام الأقل تعقيداً: مراجعة الكود (code review)، التوثيق، الإجابة على أسئلة المبتدئين.

\n\n

13:30 — مراجعة الكود: كيف لا تتشاجر مع زميلك

\n

مراجعة الكود ليست حرباً. إنها تعلم. عندما تفحص الكود

المدونات

توصيات الكتب