مقابلة PHP: لا تخف، بل استعد
\n\nمقابلة وظيفة مطور PHP ليست امتحانًا بالبطاقات، بل حوار. لكنه حوار يُتوقع منك فيه ليس فقط "أعرف PHP"، بل فهم كيفية عمل اللغة تحت الغطاء. التحضير لمقابلة PHP ليس حفظًا للتعريفات، بل تحليلًا لحالات واقعية.
\n\nفي هذه المقالة، لن ندرج مئة سؤال. بدلاً من ذلك، سأعرض لكم نمط التفكير: كيفية الإجابة على الأسئلة، وكيفية كتابة الأكواد، وما يجب التركيز عليه ليقول المحاور "واو". هيا بنا.
\n\n1. أساسيات PHP: ما يجب معرفته بالتأكيد
\n\nلنبدأ بالأساسيات. حتى لو كنت تتقدم لوظيفة Senior، قد تظهر أسئلة عن الأساسيات. إليك ثلاثة أركان تقوم عليها مقابلة PHP:
\n\n- \n
- أنواع البيانات وتحويل الأنواع — كيف يعمل
==مقابل===، وما هوstrict_types. \n - المصفوفات الشاملة (Superglobals) —
$_GET،$_POST،$_SERVER،$_SESSION. \n - التعامل مع المصفوفات —
array_map،array_filter،array_reduce. \n
مثال على سؤال: "ماذا سيطبع هذا الكود؟".
\n\n<?php\n$a = '5';\n$b = 5;\nvar_dump($a == $b); // bool(true) — مقارنة غير صارمة\nvar_dump($a === $b); // bool(false) — مقارنة صارمة\n?>\n\nتذكر: مقابلة PHP للمبتدئين غالبًا ما تُبنى على مثل هذه الفخاخ. لا تقع فيها.
\n\n2. البرمجة كائنية التوجه (OOP) في PHP: ليس مجرد "كلاس وكائن"
\n\nأسئلة PHP في المقابلات تتضمن دائمًا OOP. لكن بدلاً من سرد الأركان الثلاثة (التغليف، الوراثة، تعدد الأشكال)، أظهر كيف تستخدمها.
\n\nمثال: سيُسأل عن الواجهات (Interfaces) والفئات المجردة (Abstract Classes). لا تقل "الواجهة هي عقد". بل قدم كودًا:
\n\n<?php\ninterface PaymentGateway {\n public function pay(float $amount): bool;\n}\n\nclass StripeGateway implements PaymentGateway {\n public function pay(float $amount): bool {\n // منطق الدفع عبر Stripe\n return true;\n }\n}\n\nclass PayPalGateway implements PaymentGateway {\n public function pay(float $amount): bool {\n // منطق الدفع عبر PayPal\n return true;\n }\n}\n\nfunction processOrder(PaymentGateway $gateway, float $total) {\n if ($gateway->pay($total)) {\n echo "تم الدفع بنجاح";\n }\n}\n?>\n\nمثل هذه الإجابة تُظهر أنك تفهم مبدأ استبدال باربرا ليكوف (Liskov Substitution Principle) وتجيد تصميم أنظمة مرنة. هذا يمنحك +100 نقطة في مقابلة PHP للمستوى المتوسط.
\n\n3. التعامل مع قواعد البيانات: SQL و PDO
\n\nلا تخلو أي مقابلة PHP من أسئلة حول MySQL. تذكر: لا تستخدم أبدًا دوال mysql_* — فقد أُزيلت من PHP 7. استخدم PDO أو mysqli.
\n\nمهمة نموذجية: "اكتب استعلامًا آمنًا لقاعدة البيانات".
\n\n<?php\n$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');\n$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');\n$stmt->execute(['email' => $email]);\n$user = $stmt->fetch(PDO::FETCH_ASSOC);\n?>\n\nلماذا هذا مهم؟ لأن حقن SQL (SQL Injection) هو خطأ كلاسيكي للمبتدئين. أظهر أنك تعرف العبارات المحضرة (prepared statements).
\n\nسؤال شائع آخر هو أنواع JOIN. كن مستعدًا لشرح الفرق بين INNER, LEFT, RIGHT و FULL JOIN. وقدم مثالًا عن متى تستخدم كل نوع.
\n\n4. المهام النموذجية في مقابلة PHP
\n\nمهام PHP ليست مجرد نظرية. قد يُطلب منك كتابة كود حي (live coding). إليك ثلاثة أنواع من المهام التي تظهر غالبًا:
\n\n4.1. مهمة على المصفوفات
\n"اكتب دالة تقوم بتجميع مصفوفة من الكائنات حسب مفتاح معين".