مفهوم setter و getter در شی گرایی

تاریخ: 11 اردیبهشت 1400

setter ها و getter ها نوع خاصی از متدها هستند که در کلاس تعریف می کنیم و هدف آنها کنترل دسترسی به ویژگی های کلاس می باشد.

متد setter چیست؟

می دانیم که یک کلاس می تواند حاوی یک یا چند ویژگی باشد.

این ویژگی ها می توانند سطوح دسترسی متفاوتی داشته باشند.

از طرفی برخی از ویژگی ها حساس هستند و نمی توانیم اجازه هر تغییر ممکن بر روی آنها را بدهیم.

اگر سطح دسترسی آنها public باشد، در همه جای برنامه قابل دسترسی هستند.

اگر بخواهیم این سطح دسترسی وسیع را محدود کنیم، از سطح protected یا private استفاده می کنیم.

اما روش مهمی برای کنترل دسترسی دقیق ویژگی های حساس وجود دارد و آن استفاده از متدهای setter می باشد.

این روش به این صورت است که ما ویژگی خودمان را از نوع private می سازیم و سپس یک متد معمولی تعریف می کنیم که وظیفه ی اعمال تغییرات در این ویژگی را داشته باشد.

این متد، تغییرات را کنترل می کند و اعتبارسنجی لازم را انجام می دهد. در این صورت احتمال خرابکاری در سیستم کاهش می یابد.

مثلا می خواهیم این شرط را بگذاریم که قبل از مقدار دادن به ویژگی، چک شود که آیا آن ویژگی وجود دارد یا خیر:

class Biawp {
    public function change_url($newUrl) {
        if ( property_exists($this, 'url') ) {
            $this->url = $newUrl;
            return $this->url;
        }
        return 'Url property is not exist.';
    }
}
$object = new Biawp;
echo $object->change_url('Www.Biawp.ir');

متد change_url یک متد setter است که قبل از اینکه مقدار url را تغییر دهد، از وجود آن اطمینان می یابد.

 

متد getter چیست؟

متدهای getter از جنس get کردن یا دریافت کردن هستند.

اصولا زمانی که بخواهیم به برخی از ویژگی های غیر قابل دسترس، دسترسی داشته یا آن ها را نمایش دهیم، از این متدها استفاده می کنیم.

این متدها یک متد معمولی هستند فقط نوع عملیات آن ها، دریافت یک خصوصیت و بر گرداندن آن می باشد.

در واقع با استفاده از متد getter می خواهیم دسترسی به یک ویژگی را تحت شرایط یا اعتبارسنجی خاص محدود کنیم. نه اینکه مستقیما به آن دسترسی دهیم.

class Biawp {
    private $url = 'Biawp.ir';
    public function get_url() {
        return $this->url;
    }
}
$object = new Biawp;
echo $object->get_url(); //output: Biawp.ir

 

استفاده از متدهای setter و getter چه مزیتی دارد؟

  1. کنترل دسترسی بیشتر بر روی ویژگی ها: مشاهده کردید که با استفاده از این نوع متدها می توانیم دسترسی به ویژگی ها را محدود تر و تحت کنترل بیشتری قرار دهیم.
  2. مقیاس پذیری یا Scalability بیشتر: ری فکتور یک متد setter یا getter بسیار راحت تر از این است که به دنبال تمام ویژگی ها در پروژه بگردیم.
  3. کد تمیزتر: هنگامی که از این متدها استفاده می کنیم، کدها متمرکز شده و در محل مشخصی قرار می گیرند.

مفهوم getter و setter در شی گرایی

 

نکته: استفاده از متدهای setter و getter فقط باید در صورت ضرورت انجام شود چون تاثیر منفی بی فایده ای بر روی سرعت اجرای سیستم می گذارند.

دیدگاهتان را بنویسید