Constructor & Destructor in PHP
Constructor & Destructor in PHP
الباني والمدمر في PHP
قائمة المصطلحات والتعريفات:
المقدمة:
يعتبر الباني والمدمر من المفاهيم الأساسية في البرمجة الكائنية في لغة PHP. يتيح الباني إمكانية تهيئة الكائنات عند إنشائها، بينما يتيح المدمر تنظيف الموارد المستخدمة من قبل الكائنات قبل إزالتها من الذاكرة
تهدف هذه الوثيقة إلى شرح مفهومي الباني (Constructor) والمدمر (Destructor) في لغة البرمجة PHP، مع تقديم أمثلة
ما هو الباني (Constructor)؟
الباني هو دالة خاصة داخل الفئة تستدعى تلقائيا عند إنشاء كائن جديد منها. يستخدم الباني عادة لتهيئة الخصائص الأساسية للكائن وإعداد البيئة المناسبة له، ال constructor لا يعيد قيمة ، أي ليس له إرجاع.
كيفية إنشاء الباني في PHP
يتم تعريف الباني باستخدام الكلمة المحجوزة __construct. يمكن للباني أن يقبل معلمات لتهيئة خصائص الكائن.
<?php
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
public function displayDetails() {
return "This car is a " . $this->color . " " . $this->model . ".";
}
}
$myCar = new Car("red", "BMW");
echo $myCar->displayDetails(); // This car is a red BMW.
?>
باني لصف يرث من صف أخر:
<?php
class ParentClass {
protected $name;
// Constructor الخاص بـ class الأب
public function __construct($name) {
$this->name = $name;
echo "تم إنشاء كائن من ParentClass: {$this->name}\n";
}
}
class ChildClass extends ParentClass {
private $age;
// Constructor الخاص بـ class الابن
public function __construct($name, $age) {
// استدعاء Constructor الخاص بـ class الأب
parent::__construct($name);
// تهيئة خصائص class الابن
$this->age = $age;
echo "تم إنشاء كائن من ChildClass: العمر {$this->age}\n";
}
}
// إنشاء كائن من ChildClass
$child = new ChildClass("أحمد", 25);
?>
ما هو المدمر (Destructor)؟
المدمر هو دالة خاصة تستدعى تلقائيا عندما يتم تدمير الكائن أو عندما تنتهي صلاحية النص البرمجي. يستخدم المدمر عادة لتنظيف الموارد التي استخدمها الكائن، مثل إغلاق اتصالات قاعدة البيانات أو حذف الملفات المؤقتة.
كيفية إنشاء المدمر في PHP
يتم تعريف المدمر باستخدام الكلمة المحجوزة __destruct.
<?php
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
public function __destruct() {
echo "The object of " . $this->model . " is being destroyed.";
}
}
$myCar = new Car("red", "BMW");
echo $myCar->displayDetails(); // This car is a red BMW.
// عند انتهاء النص البرمجي، سيتم استدعاء المدمر تلقائيًا
?>
أمثلة
مثال 1: إدارة اتصال قاعدة البيانات
<?php
class Database {
private $connection;
public function __construct($host, $username, $password, $dbname) {
$this->connection = new mysqli($host, $username, $password, $dbname);
if ($this->connection->connect_error) {
die("Connection failed: " . $this->connection->connect_error);
}
echo "Connected successfully";
}
public function __destruct() {
$this->connection->close();
echo "Connection closed";
}
}
$db = new Database("localhost", "root", "toor", "test_db");
?>
دوال باني متعددة في نفس الصف:
توفر لغة البي اتش بي طريقة لانشاء غرض باكثر من معاملات دخل بشكل مختلف عن اللغات الاخرى , حيث ان عملية استقبال عدد مختلف من المعاملات هو امر يحتاج اليه المبرمج في كثير من الاحيان فمثلا:
اذا كان لدينا كود برمجي نريد تطبيقه على مخدمين وكل مخدم له معاملات مختلفة فبدل ان نقوم بانشاء نسختين من الصف نكتفي بانشاء نسخة واحدة من الصف ولكن باختلاف عدد معاملات الدخل
سأدرج مثال يوضح ذلك
class Example {
function __construct() {
$argv = func_get_args();
switch( func_num_args() ) {
case 1:
self::__construct1($argv[0]);
break;
case 2:
self::__construct2( $argv[0], $argv[1] );
break;
case 3:
self::__construct3( $argv[0], $argv[1], $argv[2] );
}
}
function __construct1($arg1) {
// do something else
}
function __construct2($arg1, $arg2) {
// do something else
}
function __construct3($arg1, $arg2, $arg3) {
// do something else
}
}
$a = new Example("Argument 1");
$b = new Example("Argument 1", "Argument 2");
$b = new Example("Argument 1", "Argument 2", "Argument 3");
المراجع
ليست هناك تعليقات: