کپسوله سازی

کپسوله سازی یا Encapsulation یا مخفی کردن اطلاعات، فرایندی است که طی آن اطللاعات حساس یک موضوع از دید کاربر مخفی می‌شود و فقط اطلاعاتی که لازم باشد برای او نشان داده می‌شود.

وقتی که یک کلاس تعریف می‌کنیم معمولاً تعدادی فیلد برای ذخیره مقادیر مربوط به شیء نیز تعریف می‌کنیم. برخی از این فیلدها توسط خود کلاس برای عملکرد متدها و برخی دیگر از آنها به عنوان یک متغیر موقت به کار می‌روند. لازم نیست که کاربر به تمام فیلدها یا متدهای کلاس دسترسی داشته باشد. اینکه فیلدها را طوری تعریف کنیم که در خارج از کلاس قابل دسترسی باشند بسیار خطرناک است چون ممکن است کاربر رفتار و نتیجه یک متد را تغییر دهد. به برنامه ساده زیر توجه کنید :

  1: <?php
  2: 
  3:     class Test
  4:     {
  5:         public $five = 5;
  6:         
  7:         public function AddFive($number)
  8:         {
  9:             $this -> five += $number;
 10:             return $this -> five;
 11:         }
 12:     }
 13:     
 14:     $test = new Test;
 15:     
 16:     $test -> five = 10;
 17:     echo $test -> AddFive(100)
 18:     
 19: ?>
110

متد داخل کلاس Test به نام ()AddFive (خطوط 11-7) دارای هدف ساده‌ای است و آن اضافه کردن مقدار 5 به هر عدد می‌باشد (همانطور که از اسم متد پیداست : AddFive). در خط 14 یک نمونه از کلاس Test ایجاد کرده‌ایم و مقدار فیلد آن را در خط 16 از 5 به 10 تغییر می‌دهیم (در اصل نباید تغییر کند چون ما از برنامه خواسته‌ایم هر عدد را با 5 جمع کند ولی کاربر به راحتی آن را به 10 تغییر می‌دهد). همچنین متد ()AddFive را در خط 17 فراخوانی و مقدار 100 را به آن ارسال می‌کنیم. مشاهده می‌کنید که قابلیت متد ()AddFive به خوبی تغییر می‌کند و شما نتیجه متفاوتی مشاهده می‌کنید. اینجاست که اهمیت کپسوله سازی مشخص می‌شود. اینکه ما در درسهای قبلی فیلدها را به صورت public تعریف کردیم و به کاربر اجازه دادیم که در خارج از کلاس به آنها دسترسی داشته باشد کار اشتباهی بود. فیلدها باید همیشه به صورت private تعریف شوند.