نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

شی گرایی(OOP)در پی اچ پی(PHP) – میدان دید

چهارشنبه, ۳۰ فروردين ۱۳۹۱، ۰۵:۰۹ ب.ظ
هر عنصری که در کلاس تعریف می شود دارای میدان دید است. میدان دید یعنی چه کسانی اجازه دارند که به این عنصر دسترسی داشته باشند یا اصطلاحا چه کسانی می توانند این عنصر را ببینند. با این قابلیت، اشیا به دلخواه عناصری را در دسترس عموم (سایر اشیا) و عناصری را درون خانواده (در مواقع توسعه یا ارث بری) و عناصری را خصوصی تایین می کنند. با این ویژگی اشیا قادر خواهند بود که از تغییر بدون اطلاع داده ها توسط سایر اشیا جلوگیری کنند. در اکثر موارد در برنامه نویسی یک کلاس، پروپرتی ها بصورت خصوصی و متد ها بصورت عمومی تعریف می شوند.
انواع میدان دید (visibility) :
سه نوع میدان دید وجود دارد. نوع عمومی(public)، نوع خصوصی (private)، نوع محافظت شده(protected).
نوع عمومی (public) اجازه می دهد تا عنصر (پروپرتی یا متد) در دسترس سایر اشیا باشد.
نوع خصوصی (private) اجازه دست رسی فقط برای خوده شی وجود دارد. ( فقط شی درونی this می تواند عناصر private را صدا بزند. )
نوع محافظت شده (protected) اجازه دسترسی علاوه بر خود شی به اشیایی که از شی ارث برده باشند هم داده می شود. (این نوع در مبحث ارث بری (یا توسعه) بیشتر توضیح داده خواهد شد).
در برنامه نویسی یک کلاس اغلب پروپتی ها را private و متد ها را public تعریف می کنند. این امر به این خاطر است که پروپرتی ها حاوی مقدار هستند و روی کار متدها و شی تاثیر مستقیم دارند، با private شدن امکان تغییر مستقیم مقدار این پروپرتی ها از بیرون وجود نخواهد داشت.
متد های set و get :
set به معنی تنظیم و get به معنی گرفتن است. متد های set معمولآ ایجاد می شوند تا مقدار را در یک پرپرتی خاص تغییر دهد و از متد get برای گرفتن مقدار یک پروپرتی خاص استفاده می شود.
کلاس کاربر حاوی مقدار نام کاربری و کلمه عبور هر شی کاربر خواهد بود.
class User
{
private $username;
private $password;

public function setUsername($username)
{
$this->username = $username;
}

public function getUsername()
{
return $this->username;
}

public function setPassword($password)
{
$this->password = $password;
}

public function getPassword()
{
return $this->password;
}
}

در صورتی از بیرون اقدام شود برای مشاهده یک عنصر private در برنامه یک اخطار مرگ (Fatal) ایجاد می شود. در حالی که در داخل کلاس این دسترسی (به کمک شی داخلی this) وجود دارد.
$user = new User();
echo $user->username; // Fatal error: Cannot access private property User::$username in ...
در این کلاس متد هایی برای set و get کردن مقدار username و password وجود دارد. این متد ها علاوه بر اینکه این امکان را می دهند تا به مقادیر پروپرتی ها از بیرون دسترسی داشت این امکان را هم به خود شی می دهند تا بتواند یک کنترل برای زمان set شدن و get شدن مقدار پروپرتی ایجاد کند. البته در این کلاس نمونه کنترل خاصی قرارداده نشده است اما درصورت ضرورت می تواند ایجاد شود.
$user = new User();
// set
$user->setUsername('php');
$user->setPassword('123');
// get
echo $user->getUsername(); // output: php
echo $user->getPassword(); // output: 123
در مورد پروپرتی ها حتما وضعیت دید (public یا private یا protected) قید شود تا نوع visibility مشخص باشد. در نسخه های قبلی PHP استفاده از کلمه کلیدی var برای پروپرتی ها رایج بود که اکیدا توصیه نمی شود.
در صورتی که وضعیت visibility پروپرتی را مشخص نکنید با یک خطای ترجمه (Parser) مواجه خواهید شد. در مورد متد ها قید visibility اختیاری است. در صورتی که visibility برای یک متد شخص نشده باشد بصورت پیش فرض visibility برابر public در نظر گرفته خواهد شد.
پیوند ها :
پی اچ پی شی گرایی 5 – میدان دید

نظرات  (۶)

مثل قسمت های قبل من همچنان تشکر می کنم
قربونت برم :)
ساده و عالی
اند یو (and you)
:D
مرسی از سایتتون یه سوال برای رفع اشکالات وخطایای پارسر باید چیکار کرد؟
مرسی
سوالت در مورد شی گرایی و ... هست یا خطایابی برنامه ؟
پارسر پی اچ پی با ... ؟
:دی
لطفا کامل تر سوالت رو بپرس .
می تونی در اینجا : http://forum.iranphp.org هم بپرسی. خودم هم هستم که جواب بدم. :دی

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی