امتحان PHP 5: البرمجة كائنية التوجه وقواعد البيانات (10 تمارين مركبة)

امتحان PHP 5: البرمجة كائنية التوجه (OOP)

اختبر مهاراتك في بناء برمجيات قوية وقابلة للتوسع باستخدام مفاهيم OOP والتعامل مع قواعد البيانات.

تمرين 1 الفئات والكائنات (Classes & Objects)

أنشئ فئة بسيطة:

  1. عرف فئة `Fruit` تحتوي على خاصيتين `$name` و `$color`.
  2. أضف دالة `set_name($name)` لتعيين الاسم.
  3. أضف دالة `get_name()` لإرجاع الاسم.
  4. أنشئ كائناً من الفئة، عين اسمه "Apple"، واطبعه.
الحل
<?php
class Fruit {
    public $name;
    public $color;

    function set_name($name) {
        $this->name = $name;
    }
    function get_name() {
        return $this->name;
    }
}

$apple = new Fruit();
$apple->set_name('Apple');
echo $apple->get_name();
?>
تمرين 2 المُنشئ (Constructor)

استخدم دالة البناء:

  1. أعد كتابة فئة `Fruit` لتستخدم `__construct($name, $color)`.
  2. يجب أن يعين المنشئ الخصائص عند إنشاء الكائن.
  3. أضف دالة `get_color()`.
  4. أنشئ كائناً "Apple" لونه "Red" واطبع اسمه ولونه.
الحل
<?php
class Fruit {
    public $name;
    public $color;

    function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }
    function get_name() {
        return $this->name;
    }
    function get_color() {
        return $this->color;
    }
}

$apple = new Fruit("Apple", "Red");
echo $apple->get_name();
echo "<br>";
echo $apple->get_color();
?>
تمرين 3 الوراثة (Inheritance)

ورّث الخصائص لفئة أخرى:

  1. أنشئ فئة `Strawberry` ترث من `Fruit`.
  2. أضف دالة جديدة `message()` تطبع "Am I a fruit or a berry?".
  3. أنشئ كائناً من `Strawberry` واستدعِ دوال الفئة الأب والابن.
الحل
<?php
class Strawberry extends Fruit {
    public function message() {
        echo "Am I a fruit or a berry? ";
    }
}

$strawberry = new Strawberry("Strawberry", "Red");
$strawberry->message();
echo $strawberry->get_name();
?>
تمرين 4 معدلات الوصول (Access Modifiers)

تحكم في الوصول للخصائص:

  1. في فئة `Fruit`، اجعل `$name` عاماً (`public`).
  2. اجعل `$color` محمياً (`protected`).
  3. اجعل `$weight` خاصاً (`private`).
  4. حاول الوصول لكل خاصية من خارج الفئة واشرح النتيجة في تعليق.
الحل
<?php
class Fruit {
    public $name;
    protected $color;
    private $weight;
}

$mango = new Fruit();
$mango->name = 'Mango'; // OK
// $mango->color = 'Yellow'; // ERROR
// $mango->weight = '300'; // ERROR
?>
تمرين 5 الثوابت في الفئات (Class Constants)

استخدم الثوابت داخل الفئة:

  1. عرف ثابتاً `LEAVING_MESSAGE` داخل فئة `Goodbye`.
  2. قيمته "Thank you for visiting W3Schools.com!".
  3. اطبع الثابت باستخدام اسم الفئة وعامل `::` (Scope Resolution Operator).
الحل
<?php
class Goodbye {
    const LEAVING_MESSAGE = "Thank you for visiting W3Schools.com!";
}

echo Goodbye::LEAVING_MESSAGE;
?>
تمرين 6 الفئات المجردة (Abstract Classes)

أنشئ هيكلاً عاماً:

  1. عرف فئة مجردة `Car` تحتوي على دالة مجردة `intro()`.
  2. أنشئ فئات `Audi` و `Volvo` ترث من `Car`.
  3. نفذ دالة `intro()` في كل فئة فرعية لتطبع رسالة مختلفة.
الحل
<?php
abstract class Car {
    public $name;
    public function __construct($name) {
        $this->name = $name;
    }
    abstract public function intro() : string;
}

class Audi extends Car {
    public function intro() : string {
        return "Choose German quality! I'm an $this->name!";
    }
}

class Volvo extends Car {
    public function intro() : string {
        return "Proud to be Swedish! I'm a $this->name!";
    }
}

$audi = new Audi("Audi");
echo $audi->intro();
?>
تمرين 7 الواجهات (Interfaces)

عرف عقداً يجب تنفيذه:

  1. عرف واجهة `Animal` تحتوي على دالة `makeSound()`.
  2. أنشئ فئة `Cat` تنفذ الواجهة وتطبع "Meow".
  3. أنشئ فئة `Dog` تنفذ الواجهة وتطبع "Bark".
الحل
<?php
interface Animal {
    public function makeSound();
}

class Cat implements Animal {
    public function makeSound() {
        echo "Meow";
    }
}

class Dog implements Animal {
    public function makeSound() {
        echo "Bark";
    }
}

$cat = new Cat();
$cat->makeSound();
?>
تمرين 8 السمات (Traits)

أعد استخدام الكود:

  1. عرف سمة `message1` تحتوي على دالة `msg1` تطبع "OOP is fun!".
  2. استخدم هذه السمة داخل فئة `Welcome`.
  3. أنشئ كائناً من `Welcome` واستدعِ `msg1`.
الحل
<?php
trait message1 {
    public function msg1() {
        echo "OOP is fun! ";
    }
}

class Welcome {
    use message1;
}

$obj = new Welcome();
$obj->msg1();
?>
تمرين 9 الاتصال بقاعدة البيانات (MySQLi Connect)

اتصل بقاعدة بيانات MySQL:

  1. استخدم `new mysqli` للاتصال بـ `localhost`، المستخدم `username`، كلمة المرور `password`.
  2. تحقق من الاتصال، إذا فشل اطبع رسالة الخطأ (`connect_error`).
  3. إذا نجح اطبع "Connected successfully".
الحل
<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
تمرين 10 الاستعلام من قاعدة البيانات (Select Data)

اجلب بيانات واعرضها:

  1. اكتب استعلام SQL لاختيار `id`, `firstname`, `lastname` من جدول `MyGuests`.
  2. نفذ الاستعلام واحصل على النتيجة.
  3. استخدم حلقة `while` لعرض كل صف من البيانات.
الحل
<?php
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن