pedia-learning

ورود

گذرواژه‌تان را فراموش کرده‌اید؟

ثبت نام

ثبت نام
انجمن عمومی گسترش فناوری آگو

اگر اولین بار از انجمن بازدید می کنید برای دسترسی کامل به انجمن عضو شوید بعد عضویت قادر به ارسال مطلب و شرکت در بحث خواهید داشت

ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه نویسی شیء گرا در PHP قسمت سوم :: ارث بری
04-20-2014, 06:40 PM
ارسال: #1
برنامه نویسی شیء گرا در PHP قسمت سوم :: ارث بری
در مقالات قبل با مقدمات شیء گرایی و نحوه دسترسی به اعضای یک شیء رو با هم بررسی کردیم.همینطور در مورد ارث بری توضیحات کمی دادم. تصمیم گرفتم در این مقاله به بحث ارث بری به طور مفصل بپردازم.
چرا ارث بری؟

اگر تجربه کار با برنامه نویسی شیء گرا رو نداشته باشید به احتمال زیاد این سوال براتون پیش اومده که چرا ارث بری یکی از مهمترین مباحث شیء گرایی محسوب میشه و چه مزیتهایی داره؟

از مزیتهای ارث بری در برنامه نویسی شیء گرا میشه به نکات زیر اشاره کرد :
۱- هنگامی که یک کلاس مینویسید ممکنه کلاسهای دیگری هم باشند که متدها و متغیرهای مشابهی باهم داشته باشند. بر این اساس از ارث بری برای کم کردن مقدار کدها استفاده میکنیم.
۲ – وقتی که چند کلاس فرزند از یک کلاس مادر ارث بری میکنن پیدا کردن خطاهای به وجود اومده بسیار راحتتره
کلمه کلیدی extends

برای ارث بری از کلمه کلیدی extends استفاده میکنیم.

کد php:
class Database
{
     
// code . . .
}
class 
Users extends Database
{
//code...


همینطور که در مثال بالا میبینید کلاس Users از کلاس Database با استفاده از کلمه کلیدی extends ارث بری کرده. یعنی کلاس Users به متدها و متغیرهایی که به صورت public یا protected در کلاس Database تعریف شدن دسترسی داره.
override کردن متدها و متغیر ها

فرض کنید شما در کلاس مادر(پدر ، اصلی و هر چی دلتون میخواد بهش بگید) یک تابع داری با نام getName

کد php:
class Database

{

     public function 
getName()

    {

         return 
__CLASS__;

    }



حالا میخوایم یک کلاس فرزند ایجاد کنیم :

کد php:
class User extends Database

{

public function 
getName()

{

return 
__CLASS__;

}



در مثال بالا متد getName در هر دو کلاس وجود داره.هنگامی که کد زیر رو اجرا میکنیم نام کلاس فرزند رو در خروجی مشاهده میکنیم :

کد php:
$user = new Users();
echo 
$user->getName(); 
شاید در بعضی مواقع نیاز باشه که از متدها و متغیر های کلاس اصلی در کلاس فرزند استفاده کنیم.با استفاده از کلمه کلیدی parent میتونیم اینکارو انجام بدیم.

مثال :

یک کلاس دیتابیس رو در نظر بگیرید.این کلاس در سازنده (__construct) عمل اتصال به دیتابیس رو انجام میده :

کد php:
class Database

{

public 
$name ;

public function 
__construct($table $pk)

{

mysql_connect('localhost','root','123');

mysql_select_db('Data');

}



کلاس بالا کلاس اصلی ماست که اتصال به دیتابیس رو در سازنده اش انجام دادیم. حالا فرض کنید که برای هر یک از جداول دیتابیس باید یک کلاس جدا بسازیم.کلاس Users رو در نظر بگیرید :

کد php:
class Users extends Database

{

function 
__construct($table $pk)

{

parent::__construct($table $pk );

}



درسازنده کلاس Users با استفاده از کلمه کلیدی parent:: به سازنده کلاس اصلی دسترسی پیدا کردیم. اما اگر این کار رو انجام نمیدادیم به خاطر اینکه سازنده رو در کلاس فرزند دوباره نوشتیم سازنده کلاس مادر اجرا نمیشد.پس با استفاده از parent:: سازنده کلاس مادر رو فراخوانی کردیم تا عمل اتصال به دیتابیس به درستی صورت بگیره.
کلمه کلیدی instanceOf

در PHP 5 یک عملگر جدید با نام instanceOf معرفی شد. این عملگر چک میکنه که آیا دو شیء متعلق به بک کلاس هستند یا خیر.

برای درک بیشتر مثال زیر رو ببینید :

کد php:
class Database

{

// code . . .

}

$db = new Database();

if(
$db instanceOf  Database)

echo 
'true';

else

echo 
'false'
در مثال بالا به خاطر اینکه شیء $db یک نمونه از کلاس Database میباشد مقدار True در خروجی چاپ میشود.

در ارث بری هم میتونید از این عملگر استفاده کنید :

کد php:
class Users extends Database

{

//code...

}

$user = new Users();

if(
$user instanceOf  Database)

echo 
'true';

else

echo 
'false'
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پیام‌های داخل این موضوع
برنامه نویسی شیء گرا در PHP قسمت سوم :: ارث بری - agotd - 04-20-2014 06:40 PM

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان


Persian Translation by MyBBIran.com - Ver: 4.1
Powered by MyBB, © 2002-2024 MyBB Group.
Theme designed by Marvel (Sidebar created by Yaldaram - Yaldaram.com)
Theme Translation by Mt Edition