كيف تجتاز مقابلة PHP: أهم الأسئلة — الجزء 4

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

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

ابدأ الدورة

كيف تجتاز مقابلة PHP: أهم الأسئلة — الجزء 4



مقابلة PHP ليست مجرد اختبار للصياغة والدوال الأساسية، بل هي فهم عميق للهندسة المعمارية، والأمان، والتعامل مع قواعد البيانات، والممارسات الحديثة. في هذا الجزء الرابع من سلسلة المقالات للموقع التعليمي pythonlib.ru، سنحلل الأسئلة المعقدة التي يطرحها غالباً مطورو السينيور، ونوضح PHP للمبتدئين والمبرمجين ذوي الخبرة كيفية الاستعداد للمقابلة التقنية. إذا كنت تدرس البرمجة وترغب في تعميق معرفتك، ستكون هذه المادة دليلك الموثوق في التعلم.



1. أسئلة حول العمل مع قواعد البيانات في PHP



أحد المحاور الرئيسية في المقابلة هو التفاعل مع MySQL أو PostgreSQL أو أنظمة إدارة قواعد البيانات الأخرى. يختبر القائمون بالمقابلة مدى فهمك لـ PHP في سياق المشاريع الحقيقية.



1.1. ما الفرق بين PDO و MySQLi؟

كلا الامتدادين يُستخدمان للعمل مع قواعد البيانات، لكن PDO يدعم 12 مشغلاً (MySQL، PostgreSQL، SQLite وغيرها)، بينما يدعم MySQLi MySQL فقط. يوفر PDO واجهة موحدة وتحضيراً أكثر أماناً للاستعلامات.



// مثال PDO$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');$stmt->execute(['email' => $email]);$result = $stmt->fetchAll();


1.2. كيف تمنع هجمات SQL Injection؟

استخدم الاستعلامات المحضرة (prepared statements) وهروب البيانات. لا تقم أبداً بإدخال المتغيرات مباشرة في سلسلة الاستعلام.



// خطير$sql = "SELECT * FROM users WHERE id = $_GET[id]";

// آمن$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');$stmt->execute(['id' => $_GET['id']]);


2. البرمجة كائنية التوجه والمفاهيم المتقدمة في PHP



الـ برمجة الحديثة بلغة PHP لا يمكن أن تكون بدون النهج الكائني التوجه. إليك الأسئلة التي يجب أن تجيب عليها بثقة.



2.1. ما هي الـ Traits ومتى تستخدمها؟

الـ Traits هي آلية لإعادة استخدام الكود في PHP، تسمح بتضمين دوال في الكلاسات دون وراثة. إنها تحل مشكلة الوراثة المتعددة.



trait Logger {    public function log($message) {        echo "[LOG]: $message";    }}

class User { use Logger;}

$user = new User();$user->log('User created');


2.2. الفرق بين الـ Interface والـ Abstract Class؟

الـ Interface يحدد عقداً (دوال بدون تنفيذ)، بينما الـ Abstract Class يمكن أن يحتوي على تنفيذ افتراضي. يمكن للكلاس تنفيذ عدة Interfaces، لكنه يرث فقط Abstract Class واحداً.



3. الأمان والأداء



في المقابلة، غالباً ما يُسأل عن الثغرات النموذجية والتحسين. هذا مهم بشكل خاص لـ PHP للمبتدئين لتكوين عادات صحيحة فوراً.



3.1. كيف تحمي من هجمات XSS؟

استخدم الدالة htmlspecialchars() لهروب مخرجات البيانات التي تم الحصول عليها من المستخدم.



echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');


3.2. ما هو تخزين Opcode المؤقت (Opcode Caching) وما فائدته؟

PHP هي لغة مفسرة: كل طلب يقوم بتجميع السكريبتات إلى Opcode. التخزين المؤقت (مثل OPcache) يحفظ الكود المترجم في الذاكرة، مما يسرع التنفيذ بمقدار 2-5 مرات.



4. مهام عملية في المقابلة



في الختام، نقدم مهمة نموذجية تختبر معرفة هياكل البيانات وصياغة PHP.



4.1. تنفيذ دالة لحساب تكرار الأحرف

اكتب دالة تُرجع مصفوفة، حيث المفاتيح هي أحرف السلسلة النصية، والقيم هي عدد مرات تكرارها.



function countChars(string $str): array {    $result = [];    for ($i = 0; $i < strlen($str); $i++) {        $char = $str[$i];        if (isset($result[$char])) {            $result[$char]++;        } else {            $result[$char] = 1;        }    }    return $result;}

print_r(countChars('hello'));// Array ( [h] => 1 [e] => 1 [l] => 2 [o] => 1 )

المدونات

توصيات الكتب