close
تبلیغات
Encapsulation (کپسوله سازی)
close
تبلیغات
ثبت لینک و بنر در اینجا
کسب درآمد اینترنتی
loading...
YourAds Here YourAds Here

مرجع مقالات رسمی طراحی سایت

بازدید : 8
سه شنبه 7 خرداد 1398 زمان : 14:03

من در کد بالا صرفا با قرار دادن obj->name$ مقدار این property را چاپ کردم اما در مثال زیر من آغاز با استعمال از متد getProperty میزان فعلی name$ را چاپ می کنم و آن‌گاه در تراز بعدی با به کارگیری از متد setProperty و ارسال یک میزان به عنوان آرگومان یک اندازه نو برای name$ انتخاب می کنم و سپس مجدد با چاپ کردن متد getProperty میام مقدار فعلیش رو چاپ می کنیم .

طراحی سایت در مشهد

این یک رویکرد حیاتی برای set و get کردن property هاست که به زودی در ادامه دلیل آن را متوجه خواهید شد ولی فعلا از روءیت کرد امتحان کردن یک متد به آن نگاه کنید .


class
MyClass {

public $name = "John Doe";

public function setProperty($newval)
{
$this->name = $newval;
}

public function getProperty()
{ return $this->name .
"
";
} }

$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
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

class
MyClass {

public $name = "John Doe";

public function setProperty($newval)
{
$this->name = $newval;
}

public function getProperty()
{ return $this->name .
"
";
} }

$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
?>
فیض
زیر حاصل اجرای کد بالا می باشد :
John
Doe Hesam
Mousavi 1
2
John
Doe Hesam
Mousavi دقت : قدرت oop زمانی اشکار می شود که ما از یک کلاس یک سری شی می سازیم .

به
مثال زیر دقت کنید :

class
MyClass {

public $name = "John Doe";

public function setProperty($newval)
{
$this->name = $newval;
}

public function getProperty()
{ return $this->name .
"
";
} }

//
Create two objects $obj
= new MyClass; $obj2
= new MyClass;
//
Get the value of $name from both objects echo
$obj->getProperty(); echo
$obj2->getProperty();
//
Set new values for both objects $obj->setProperty("I'm
a new name! Mohammad"); $obj2->setProperty("obj
2 with name Ali");
//
Output both objects' $name value echo
$obj->getProperty(); echo
$obj2->getProperty();
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

class
MyClass {

public $name = "John Doe";

public function setProperty($newval)
{
$this->name = $newval;
}

public function getProperty()
{ return $this->name .
"
";
} }

//
Create two objects $obj
= new MyClass; $obj2
= new MyClass;
//
Get the value of $name from both objects echo
$obj->getProperty(); echo
$obj2->getProperty();
//
Set new values for both objects $obj->setProperty("I'm
a new name! Mohammad"); $obj2->setProperty("obj
2 with name Ali");
//
Output both objects' $name value echo
$obj->getProperty(); echo
$obj2->getProperty();
?>
فیض
ذیل حاصل از اجرای کد بالاست :
John
Doe John
Doe I'm
a new name! Mohammad obj
2 with name Ali 1
2
3
4
John
Doe John
Doe I'm
a new name! Mohammad obj
2 with name Ali همانگونه که در بالا می بینید شما با به کارگیری از oop می توانید از یک قطعه کد بارها و بارها در قالب اشیا متعدد به کارگیری فرمایید .

Encapsulation
(کپسوله سازی) اولی باری که این نام را می بینید تعجب می فرمایید و از خود می پرسید یعنی چی میتونه باشه! راستش برای من نیز خیلی تعجب آور بود اما زمانی مفهوم کپسوله سازی را متوجه شوید، دیگر درک آن بی آلایش می شود .

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

مطالب
دیگر : Full stack developer چه است و برای تبدیل شدن به آن چه باید کرد؟ یعنی یک عدد مقداردهی 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 استعمال کردیم اما هر موضوعی با مثال آشکار تر می شود پس به مثال های ذیل اعتنا فرمائید تا اکثر این مساله را شعور فرمایید :

class
MyClass {

public $name = 'John Doe'; }

$obj
= new MyClass;
echo $obj->name .
'
';
$obj->name
= 'Hesam Mousavi';
echo
$obj->name ;
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

class
MyClass {

public $name = 'John Doe'; }

$obj
= new MyClass;
echo $obj->name .
'
';
$obj->name
= 'Hesam Mousavi';
echo
$obj->name ;
?>


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

class
MyClass {

protected $name = 'John Doe'; }

$obj
= new MyClass;
echo
$obj->name;
?>
1
2
3
4
5
6
7
8
9
10
11
12

class
MyClass {

protected $name = 'John Doe'; }

$obj
= new MyClass;
echo
$obj->name;
?>
در بالا property از مدل protected برای همین در object خیر می توانید مقداردهی نمائید و نه می توانید میزان فعلی را بر گردانید . در واقع اگه کد بالا را اجرا کنید، ارور دریافت خواهید کرد .

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


class
MyClass {

protected $name = "John Doe";

public function setProperty($newval)
{
$this->name = $newval;
}

public function getProperty()
{ return $this->name .
"
";
} }

$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
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

class
MyClass {

protected $name = "John Doe";

public function setProperty($newval)
{
$this->name = $newval;
}

public function getProperty()
{ return $this->name .
"
";
} }

$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 دارااست این می‌باشد که در کلاس های دیگر قابل استفاده نیست .

نظرات این مطلب

تعداد صفحات : 6

درباره ما
اطلاعات کاربری
نام کاربری :
رمز عبور :
  • فراموشی رمز عبور؟
  • آرشیو
    خبر نامه


    معرفی وبلاگ به یک دوست


    ایمیل شما :

    ایمیل دوست شما :



    چت باکس
    پیوندهای روزانه
    آمار سایت
  • کل مطالب : 70
  • کل نظرات : 0
  • افراد آنلاین : 1
  • تعداد اعضا : 0
  • بازدید امروز : 3
  • بازدید کننده امروز : 1
  • باردید دیروز : 0
  • بازدید کننده دیروز : 0
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 5
  • بازدید ماه : 6
  • بازدید سال : 263
  • بازدید کلی : 263
  • کدهای اختصاصی