کپسوله سازی - برنامه نویسی شی گرا در php | قسمت سوم

گردآوری و تالیف : حسام موسوی
تاریخ انتشار : 30 شهریور 1394
دسته بندی ها : برنامه نویسی

با سلام خدمت دوستان و کاربران عزیز وبسایت راکت در قسمت های قبل یعنی

در مورد مفهوم برنامه نویسی شی گرا در php و همینطور در مورد property ها و method ها صحبت کردیم و با مثال های مختلف اونا رو بهتون یاد دادیم حالا در این جلسه قصد دارم در مورد Encapsulation (کپسوله سازی) صحبت کنم و اونو بهتون آموزش بدم امیدوارم مورد استفاده اتون قرار بگیره . 

Encapsulation (کپسوله سازی)

اولین باری که این اسم رو میبینید تعجب میکنید که این دیگه چیه . یعنی قراره چی باشه ! راستش خودمم همینطور بودم ، برام عجیب بود ولی وقتی معنی کسپوله سازی رو بفهمید دیگه براتون ساده میشه . همونطوری که برای من ساده شد. کپسوله سازی همون پنهان سازی اطلاعاته اما ما چرا باید اطلاعاتی رو پنهان سازی کنیم . در جلسه قبل اگه یادتون باشه من دوتا method درست کردم به اسم های set و get که هر کدوم کار خودشون رو انجام می دادن یعنی یکی مقداردهی property مون رو انجام میداد و یکی مقدار property رو برامون بر میگردوند اما چرا باید اینطوری باشه . این سوالیه که منم داشتم چون ما به راحتی میتونیم از خود property استفاده کنیم و مقداردهی و چاپش کنیم اما این درست نیست . گاهی property ها و method های حساسی وجود داره که قابل استفاده در object ها نیستن ! چرا نیستن ؟ چون پنهان سازی شدن . اگه یادتون باشه در جلسه قبلی سه کلمه کلیدی public , private و protected رو معرفی کردم اما فقط از public استفاده کردم و گفتم تو این جلسه میگم اینا به چه کاری میان بزارین با تعریف کردن هر کدوم اینا به نتیجه برسیم . 

protected  : اگر property یا method ای قبلش از این کلمه استفاده بشه به این معنیه که شما از اون property و method  فقط در کلاس ها میتونید استفاده کنید و اصلا نمی تونید در object ای که میسازید مورد استفاده قرارش بدید . [ البته با روش های خاص میشه ]

private : اگر property یا method ای قبلش از این کلمه استفاده بشه به این معنیه که شما از اون property و method فقط و فقط میتونید در داخل همون کلاس استفاده کنید و پس یعنی قابلیت استفاده در object رو هم ندارید . private شبیه protected  اما استفاده نشدن در کلاس های دیگه بین اونا فرق میزاره . 

و در نهایت public : اگر property یا method ای قبلش از این کلمه استفاده بشه به این معنیه که شما از اون property و method به راحتی می تونید در کلاس ها و object ها استفاده کنید . به همین سادگی . 

خب حالا شما میگین اینا فقط تعریف بودن اما هنوز کپسوله سازی رو دقیقا نفهمیدم که چی هست . شما گاهی میخواین اطلاعاتی رو به نسبت حساسیتش از object یا کلاس های دیگه مخفی کنید . برای همین به نسبت کاری که قراره انجام بدید در از private یا protected استفاده میکنید تا دیگه در object ها قابلیت استفاده نداشته باشن . 

خب حالا فکر کنم باید متوجه شده باشید چرا از method های set و get استفاده کردیم ولی هر موضوعی با مثال واضح تر میشه پس به مثال های زیر دقت کنید تا بیشتر براتون این موضوع جا بیوفته . 

<?php

class MyClass
{
  public $name = 'John Doe';
}

$obj = new MyClass;

echo $obj->name . '</br >';

$obj->name = 'Hesam Mousavi';

echo $obj->name ;

?>

این همون مثال جلسه قبلیه در این مثال property ما از نوع public برای همین با ساخت object به راحتی می تونید از خود object هم عمل مقدار دهی دوباره و هم مقدار فعلیش رو برگشت بدید . حالا به مثال زیر هم دقت کنید .

<?php

class MyClass
{
  protected $name = 'John Doe';
}

$obj = new MyClass;

echo $obj->name;

?>

در بالا property ما از نوع protected برای همین در object نه میتونید مقدار دهی کنید و نه میتونید مقدار فعلی رو بر گردونید در واقع اگه کد بالا رو اجرا کنید بهتون ارور میده . 

اما در مثال زیر با استفاده از متدهای get و set به راحتی یک property ای که از نوع protected باشه رو مقدار دهی یا مقدار فعلی رو برگشت میدیم . 

<?php
 
class MyClass
{
  protected $name = "John Doe";
 
  public function setProperty($newval)
  {
      $this->name = $newval;
  }
 
  public function getProperty()
  {
      return $this->name . "<br />";
  }
}
 
$obj = new MyClass;
 
echo $obj->getProperty(); // Get the property value
 
$obj->setProperty("Hesam Mousavi"); // Set a new one
 
echo $obj->getProperty(); // Read it out again to show the change
 
?>

حالا میبینید که در کد بالا به راحتی با استفاده از method ها تونیستم عمل مقدار دهی و همینطور برگشت مقدار فعلی یک property از نوع protected رو انجام بدیم . برای کلمه private هم همین وضعیت بالا (protected) برقراره اما یک ویژگی دیگه ای که private داره اینکه در کلاس های دیگه قابل استفاده نیست . 

امیدوارم این بحث هم مورد استفاده اتون قرار گرفته باشه . اگر نظری یا سوالی داشتین در بخش نظرات حتما بیان کنید . جلسه بعدی در مورد ارثیت ( Inheritance ) صحبت میکنم . 

مقالات پیشنهادی

برنامه نویسی شی گرا در php | قسمت پنجم

خب امروز در این پست رسیدیم به متدهایی جادوئی در شی گرایی php . در php برای ساده تر کردن بعضی از کارها در کلاس ها یک سری متدهای خاص و ویژه در شی گرایی...

برنامه نویسی شی گرا در php | قسمت اول

در گذشته قبل از اینکه مفهومم شی گرایی وارد زبان php بشه برنامه نویس ها مجبور بودن که php رو در کنار html استفاده کنن که این روش در پروژهای کوچیک مشکل...

برنامه نویسی شی گرا در php | قسمت دوم

برای اضافه کردن اطلاعات در کلاس ها از property ها استفاده میشه . کار اونها دقیقا شبیه متغیرها در php معمولیه و تنها تفاوتشون اینکه قبل از تایپ اسم pro...

برنامه نویسی شی گرا در php | قسمت چهارم

امروز میخوام در مورد یک بحث مهم در شی گرائی صحبت کنم و اونم وارثته . خوب اینجا من گفتم وارثت ، اولین چیزی که بعد از شنیدن وراثت به ذهنتون خطور کرد چی...