۳ مهدی
صدا زدن متد construct !
جامعه پی اچ پی ایجاد شده در ۱۲ تیر ۱۴۰۱

سلام

زمانی که ما یک constructor تعریف میکنیم باید access modifier اون رو public قرار بدیم. اینجوری از بیرون از کلاس ما میتونیم اون رو مثل یک متد صدا بزنیم و property‌ها رو تغییر بدیم:

class Person
{
    private $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function getName()
    {
        return $this->name;
    }
}
$p1 = new Person('Mehdi');
$p1->__construct('Reza');
echo $p1->getName();
# Output:
# Reza

آیا ما باید جلوی همچین چیزی رو بگیریم؟ اگر آره چجوری؟

سلام دوست عزیز

اگر پراپرتی دارید که نمیخواید تغییر کنه، در php 8.1 میتونید به شکل زیر پراپرتی خود را readonly کنید تا جلوی تغییر اون رو بگیرید

class Person
{
    private readonly string $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function getName()
    {
        return $this->name;
    }
}
$p1 = new Person('Mehdi');
$p1->__construct('Reza'); // thrown exception =>  Cannot modify readonly property Person::$name
echo $p1->getName();

موفق باشید ?

محمد گازری ۱۳ تیر ۱۴۰۱، ۰۴:۱۰

آها مرسی

پس درواقع readonly باعث میشه زمانی که مقدار گرفت دیگه قابل تغییر نباشه، درسته؟

مثل constant

مهدی ۱۳ تیر ۱۴۰۱، ۰۴:۱۵

بله درسته، بعد از تغییرش دیگه مقدار جدید دریافت نمی‌کنه

این قابلیت دقیقا برای اینجور مواقع به php اضافه شده

موفق باشید ?

بهترین پاسخ
محمد گازری ۱۳ تیر ۱۴۰۱، ۰۴:۲۴