توابع Constructor در PHP؛ اصول برنامه نویسی شی گرا

توابع Constructor در PHP؛ اصول برنامه نویسی شی گرا

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۰۴ مرداد ۱۴۰۳
آخرین بروزرسانی: ۰۴ مرداد ۱۴۰۳
زمان مطالعه: 8 دقیقه
۰
(۰)

توابع Constructor در PHP از جمله مزایایی است که کلاس‌ها در اختیار برنامه‌نویسان قرار می‌دهند. با استفاده از این قابلیت امکان ایجاد ویژگی‌های یک شی درست در زمان ساخت آن شی فراهم خواهد بود. به این صورت، یک قابلیت سریع و بهینه در اختیار برنامه‌نویس است تا بتواند مقادیر پیش‌فرض ویژگی‌ها را اعمال کرده و به یکی از قابلیت‌های اساسی برنامه‌نویسی شیء‌گرا دسترسی داشته باشد. 

توابع سازنده در PHP و نقش آنها در برنامه‌نویسی شی گرا

توابع Constructor در PHP یکی از اجزای اساسی و مهم برنامه‌نویسی شی‌ء‌گرا هستند که نقش مهمی در مقداردهی به اشیا اولیه خواهند داشت. زمانی که یک کلاس در زبان پی‌اچ‌پی تعریف می‌کنید، مطمئنا در آینده نیاز است تا یک نمونه‌سازی از آن انجام دهید که این کار با نام ایجاد شیء نامگذاری می‌شود. توابع خاصی در برنامه‌نویسی شیء‌گرا وجود دارند که با نمونه‌سازی یک کلاس، به صورت خودکار فراخوانی خواهند شد تا کار خاصی را انجام دهند. هدف از استفاده از این توابع Constructor در PHP مقداردهی‌های اولیه و انجام بعضی از تنظیمات اولیه در مورد اشیا است.

شما نه تنها در زبان پی‌اچ‌پی، بلکه در دیگر زبان‌ها مانند پایتون، سی ++ و حتی جاوا نیز به این قابلیت‌ها در کلاس دسترسی دارید.

تعریف و مفهوم Constructor

اگر به دنبال جواب این سوال هستید که مفهوم استفاده از Constructor در PHP چیست، در این بخش به آن پاسخ خواهیم داد. در بسیاری از موارد، نیاز است تا در همان ابتدای ایجاد یک شیء، چند ویژگی آن نیز تعریف شود. همچنین، شاید در یک شیء خاص، نیاز به اعمال تنظیماتی باشد که به راحتی با استفاده از توابع Constructor در PHP می‌توان این کار را انجام داد. 

اجباری کردن تعریف پارامترها و ویژگی‌های خاص در زمان مثال‌زنی از یک کلاس، مزیت مهمی است که توابع  Constructor در اختیار شما قرار می‌دهد. همچنین، با این ویژگی، استفاده از اشیاء ساده‌تر، سریعتر و مطمئن‌‌تر خواهد بود.

در ادامه یک تکه کد مشاهده می‌کنید که کاربرد اساسی توابع سازنده در PHP را مشخص می‌کند. این مثال، درک نحوه اعمال تنظیمات با استفاده از توابع سازنده را برایتان آسان‌تر خواهد کرد.

در این مثال، یک کلاس دیتابیس تعریف شده است که دارای چند ویژگی است. در چنین کلاس‌هایی در زمان Instantiate کلاس، لازم است تا ویژگی‌هایی مانند نام کاربری، نام دیتابیس و … تعریف شوند. در غیر این صورت، در عمل یک نقص بزرگ به وجود خواهد آمد. توابع Constructor در PHP، این کار را آسان خواهند کرد.

در این مثال، یک درخواست برای اتصال به دیتابیس mydb موجود در MySQL ارسال خواهد شد. در صورت فعال بودن دیتابیس MySQL و وب‌سرور XAMPP روی سیستم‌تان، می‌توانید این کد را تست کنید:

 

<?php
class Database {
    private $host;
    private $user;
    private $password;
    private $dbname;
    private $connection;
    // Constructor
    public function __construct($host, $user, $password, $dbname) {
        $this -> host = $host;
        $this -> user = $user;
        $this -> password = $password;
        $this -> dbname = $dbname;
        // Establishing the database connection
        $this -> connect();
    }
    // Method to establish database connection

    private function connect() {
        $this -> connection = new mysqli($this -> host, $this -> user, $this -> password, $this -> dbname);
        if ($this -> connection -> connect_error) {
            die("Connection failed: " . $this -> connection -> connect_error);
        }
        echo "Connected successfully to the database: " . $this -> dbname . "\n";
    }
    // Method to close the database connection
    public function close() {
        if ($this -> connection) {
            $this -> connection -> close();
            echo "Connection closed.\n";
        }
    }
}
// Creating an instance of the Database class

$db = new Database("localhost", "root", "", "mydb");
// Closing the connection
$db -> close();
?>

 

با اجرای کد، خروجی زیر را در اختیار دارید:

نحوه تعریف و استفاده از Constructor در PHP

سازنده‌ها معمولا و در اکثر موارد برای مقداردهی اولیه به ویژگی کلاس یا اعمال یک تنظیم خاص مورد استفاده قرار می‌گیرند. با استفاده از متد __construct می‌توان سازنده کلاس را در پی‌اچ‌پی تعریف کرد. 

در مثال زیر یک کلاس با نام میوه تعریف شده است که دارای ۲ ویژگی نام و وزن است. تابع سازنده، در زمان ایجاد یک شیء از این کلاس، ۲ ویژگی موردنظر را تعریف خواهد کرد:

 

<?php
class Fruit {
    public $name;
    public $weight;
    // Constructor
    public function __construct($name, $weight) {
        $this->name = $name;
        $this->weight = $weight;
    }
    // Method to display fruit information
    public function displayInfo() {
        echo "Name: " . $this->name . "\n";
        echo "Weight: " . $this->weight . " grams\n";
    }
}
    // Creating instances of the Fruit class
    $apple = new Fruit("Apple", 150);
    $banana = new Fruit("Banana", 120);
    // Using the displayInfo method to show fruit information
    $apple->displayInfo();
    $banana->displayInfo();
?>

 

در صورت اجرای این کد، خروجی را به صورت زیر دریافت می‌کنید:

 

امکان تعریف ویژگی‌ها به صورت محافظت شده نیز در کلاس‌ها وجود دارد. در این صورت، می‌توان برای تعریف آن‌ها در زمان ایجاد شیء با تابع سازنده اقدام کرد. با این حال، در صورت protected بودن ویژگی‌ها، امکان دسترسی از خارج از کلاس به آن‌ها وجود ندارد. کلاس زیر با نام حیوان ساخته می‌شود و دارای دو ویژگی نام و رنگ است:

 

<?php
class Animal {
    protected $name;
    protected $color;
    // Constructor
    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }
    // Method to display animal information
    public function displayInfo() {
        echo "Name: " . $this->name . "\n";
        echo "Color: " . $this->color . "\n";
    }
}
    // Creating instances of the Animal class
    $cat = new Animal("Cat", "Black");
    $dog = new Animal("Dog", "Brown");
    // Using the displayInfo method to show animal information
    $cat->displayInfo();
    $dog->displayInfo();
?>

 

با اجرای این کد، خروجی زیر را در ترمینال در اختیار دارید:

 

در صورت نیاز به دسترسی به ویژگی از خارج از کلاس، خطا دریافت خواهید کرد:

 

<?php
class Animal {
    protected $name;
    protected $color;
    // Constructor
    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }
    // Method to display animal information
    public function displayInfo() {
        echo "Name: " . $this->name . "\n";
        echo "Color: " . $this->color . "\n";
    }
}
    // Creating instances of the Animal class
    $cat = new Animal("Cat", "Black");
    $dog = new Animal("Dog", "Brown");
    // Using the displayInfo method to show animal information
    $cat->displayInfo();
    $dog->displayInfo();
    echo $cat -> name;
?>

 

ویژگی های Constructor در PHP

ویژگی‌های توابع Constructor در PHP، از اساسی‌ترین نیازها هستند که در حالت کلی برای کلاس موردنظر تعریف خواهند شد. در همان ابتدای کلاس، این ویژگی‌ها یا همان Propertyها تعریف می‌شوند که مختص کلاس هستند. ویژگی‌های سازنده‌ها با استفاده از تابع __construct به داخل سازنده منتقل می‌شوند تا عملیات موردنیاز روی آن‌ها انجام شود. 

شما می‌توانید ویژگی‌ها را به صورت عمومی یا حفاظت‌شده تعریف کنید. همچنین، امکان تعریف ویژگی‌های خصوصی نیز داخل کلاس وجود دارد تا در صورت نیاز، Constructor از آن‌ها استفاده کند.

در مثال زیر ۲ ویژگی برای کلاس حیوان تعریف شده است که هر دو خصوصی هستند. در نهایت، کلاس می‌تواند داخل توابع Constructor یا سایر توابع خود از آن‌ها استفاده کند. 

 

<?php
class Animal {
    private $name;
    private $color;
    // Constructor
    public function __construct($name, $color) {
        $this -> name = $name;
        $this -> color = $color;
    }
    // Getter for name
    public function getName() {
        return $this -> name;
    }
    // Setter for name
    public function setName($name) {
        $this -> name = $name;
    }
    // Getter for color
    public function getColor() {
        return $this -> color;
    }
    // Setter for color
    public function setColor($color) {
        $this -> color = $color;
    }
    // Method to display animal information
    public function displayInfo() {
        echo "Name: " . $this -> getName() . "\n";
        echo "Color: " . $this -> getColor() . "\n";
    }
}
    // Creating instances of the Animal class
    echo "before: \r\n";
    $cat = new Animal("Cat", "Black");
    $dog = new Animal("Dog", "Brown");
    // Using the displayInfo method to show animal information
    $cat -> displayInfo();
    $dog -> displayInfo();
    // Changing the name and color of the cat
    echo "after: \r\n";
    $cat -> setName("Kitten");
    $cat -> setColor("White");
    // Displaying the updated information
    $cat -> displayInfo();
    $dog -> displayInfo();
?>

 

در صورت اجرای کد، خروجی زیر را در ترمینال در اختیار دارید:

پارامترهای ورودی در Constructor

در زمان ایجاد یک شیء از کلاس، به احتمال زیاد پارامترها یا آرگومان‌هایی نیز به داخل توابع Constructor در PHP تزریق خواهد شد. این پارامترها با استفاده از عملیات موردنیاز در نهایت در تابع سازنده یا حتی سایر توابع مانند set و get مورد استفاده قرار می‌گیرند. 

داخل توابع سازنده در PHP با استفاده از اپراتور <- امکان اساین کردن پارامترها به متغیرهای تعریف شده فراهم است. 

در مثال زیر، امکان ارسال دو پارامتر نام و موقعیت شغلی وجود دارد. همچنین، تابع Constructor در PHP این دو پارامتر را دریافت کرده و در نهایت پس از اعمال تغییراتی روی آن، نام فرد را به $name اختصاص می‌دهد.

 

<?php
class Employee {
    private $name;
    private $position;
    // Constructor
    public function __construct($name, $position) {
        $this -> name = "Mr. " . $name;
        $this -> position = $position;
    }
    // Getter for name
    public function getName() {
        return $this -> name;
    }
    // Setter for name
    public function setName($name) {
        $this -> name = "Mr. " . $name;
    }
    // Getter for position
    public function getPosition() {
        return $this -> position;
    }
    // Setter for position
    public function setPosition($position) {
        $this -> position = $position;
    }
    // Method to display employee information
    public function displayInfo() {
        echo "Name: " . $this -> getName() . "\n";
        echo "Position: " . $this -> getPosition() . "\n";
    }
}
    // Creating an instance of the Employee class
    $employee1 = new Employee("Paul Smith", "Developer");
    $employee2 = new Employee("Jane Black", "Manager");
    // Using the displayInfo method to show employee information
    $employee1 -> displayInfo();
    $employee2 -> displayInfo();
?>

 

با اجرای کد در VSCode، خروجی زیر را در اختیار دارید:

استفاده از مقادیر پیش فرض در Constructor

در توابع Constructor در PHP امکان تعریف مقادیر پیش‌فرض نیز وجود دارد. به این صورت، شما می‌توانید یک ویژگی را در همان ورودی تابع سازنده پی اچ پی تعریف کنید تا در صورت تعریف نشدن ویژگی از خارج، مقدار پیش‌فرض به داخل Constructor تزریق شود. 

مثال زیر را تصور کنید که در آن یک کلاس با نام خودرو تعریف شده است که دارای دو ویژگی رنگ و مدل است. رنگ خودرو به صورت پیش‌فرض برای تمامی اشیاء ساخته شده از این کلاس قرمز است اما می‌توان آن را در صورت نیاز تغییر داد:

 

<?php
class Car {
    private $color;
    private $model;
    // Constructor with default value for color
    public function __construct($model, $color = "Red") {
        $this -> model = $model;
        $this -> color = $color;
    }
    // Getter for model
    public function getModel() {
        return $this -> model;
    }
    // Setter for model
    public function setModel($model) {
        $this -> model = $model;
    }
    // Getter for color
    public function getColor() {
        return $this -> color;
    }
    // Setter for color
    public function setColor($color) {
        $this -> color = $color;
    }
    // Method to display car information
    public function displayInfo() {
        echo "Model: " . $this -> getModel() . "\n";
        echo "Color: " . $this -> getColor() . "\n";
    }
}
// Creating instances of the Car class
$car1 = new Car("Toyota Corolla");
$car2 = new Car("Honda Civic", "Blue");
// Using the displayInfo method to show car information
$car1 -> displayInfo();
$car2 -> displayInfo();
?>

 

با اجرای این کد، در خروجی اطلاعات خودروها را در اختیار دارید:

تفاوت بین Constructor و روش های دیگر ساخت اشیا 

ساخت اشیاء با استفاده از توابع Constructor در PHP مزایای بسیاری را فراهم می‌کند و همه چیز با استفاده از این روش آسان و سریع است. برای ساخت اشیاء و مقداردهی اولیه روش‌های دیگری نیز وجود دارد اما ساده‌ترین کار استفاده از توابع سازنده است. این توابع سازنده در PHP به صورت خودکار فراخوانی می‌شوند و براساس آن‌ها امکان کاهش خطوط کد و افزایش سرعت عمل اجرای برنامه‌ها فراهم است. 

در صورتی که برای ساخت اشیاء یا اعمال تنظیمات اولیه از توابع استاتیک استفاده شود، نیاز به فراخوانی دستی آن‌ها است که در برنامه‌های پیچیده یک مشکل بزرگ به حساب خواهد آمد. 

رفع اشکال و مشکلات رایج در استفاده از Constructor

توابع Constructor در PHP نیز ممکن است مانند سایر بخش‌های کد پی‌اچ‌پی دچار مشکل شوند. با این حال، روش‌هایی در دنیای برنامه‌نویسی تعیین شده است تا بتوان از مدل این خطاها در همان ابتدا اطلاع پیدا کرده و در صورت بروز چنین مشکلاتی آن‌ها را در زمانی سریع برطرف کرد.

یکی از بهترین متدها برای جلوگیری از خرابی کدها و متوقف شدن آن‌ها استفاده از بلوک try catch است. با استفاده از این بلوک می‌توان در زمانی سریع، خطای موردنظر را مشاهده کرد و آن را در خروجی در اختیار داشت. 

برای مثال، در کد زیر یک کلاس با نام حیوان تعریف شده است که دارای ۲ ویژگی نام و وزن است. این کلاس با استفاده از توابع Constructor در PHP در ابتدا نام را به متغیر مربوطه اساین می‌کند. در مرحله بعدی، وزن بررسی خواهد شد تا کمتر از صفر نباشد. در صورت وجود خطا در این مورد، با استفاده از دستور throw new Exception، امکان چاپ خطا در خروجی فراهم است:

 

<?php
class Animal {
    public $name;
    public $weight;
    // Constructor
    public function __construct($name, $weight) {
        $this -> name = $name;
        // Check if the weight is valid
        if ($weight < 0) {
            throw new Exception("Weight cannot be negative.");
        }
        $this -> weight = $weight;
    }
    // Method to display animal information
    public function displayInfo() {
        echo "Name: " . $this -> name . "\n";
        echo "Weight: " . $this -> weight . " kg\n";
    }
}
try {
    // Creating an instance of the Animal class with a negative weight to trigger an exception
    $cat = new Animal("Cat", -5);
    $cat -> displayInfo();
} catch (Exception $e) {
    // Catching the exception and displaying the error message
    echo "Error: " . $e -> getMessage() . "\n";
}
?>

 

با اجرای این کد که ورودی -۵ را برای وزن تعیین می‌کند، یک خطا دریافت خواهید کرد که به صورت زیر است:

جمع بندی 

توابع Constructor در PHP یک قابلیت مهم به حساب می‌آیند که پس از آموزش آن می‌توانید بسیاری از عملیات مرتبط با کلاس‌ها را آسان کنید. این توابع بخش جدایی‌ناپذیر از برنامه نویسی شیءگرا هستند و در طول مسیر مطمئنا با چنین موضوعاتی برخورد خواهید داشت. بنابراین، بهتر است در همین ابتدای مسیر به مفاهیم این چنینی تسلط کافی را پیدا کنید تا در آینده به راحتی از آن‌ها استفاده کنید.

 

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
دانلود مقاله
توابع Constructor در PHP؛ اصول برنامه نویسی شی گرا
فرمت PDF
صفحه
حجم مگابایت
دانلود مقاله
title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
324 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
پروفایل نویسنده
title sign
دیدگاه کاربران

ثبت‌نام دوره‌های آنلاین تابستانه نیک‌آموز شروع شد 🏄
مشاهده سرفصل و رزرو رایگان
close-image