Introduction to Object Oriented...

47
masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming Authors: Ed Lecky-Thompson Steven D. Nowicki Thomas Myer Interpreter: Masoud Amjadi ©July - 3122 www.ParsBook.org

Transcript of Introduction to Object Oriented...

Page 1: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 1

Introduction to Object Oriented

Programming

Authors:

Ed Lecky-Thompson Steven D. Nowicki

Thomas Myer

Interpreter:

Masoud Amjadi

©July - 3122

www.ParsBook.org

Page 2: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 2

مقذمه ای تر ترنامه نویسی

گرا شئ

:یؼذب

Ed Lecky-Thompson Steven D. Nowicki

Thomas Myer

:تشر

امجذیمسعود

© 2431 -تیر

www.ParsBook.org

Page 3: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 3

فهرست

Introduction to Object-Oriented Programming What Is Object-Oriented Programming? 6

OOP Advantages 7 A Real-World Example 8

Understanding OOP Concepts 9 Classes 10

Objects 11 Inheritance 15 Interfaces 25 Encapsulation 27

Changes to OO in PHP 29 Summary 30

.تا کلیک تر روی عناوین ته صفحه ی مورد نظر هذایت می شویذ

ترنامه نویسی شی گرا چیست؟ ضایبی ثشب یؼی ؿی شا یه خب الؼی

جنثه های ترنامه نویسی شی گرا

کالس ها

یباؿ

ساحت

وپؼ ػبصی

اػظ ب

PHPتغییرات شی گرایی در

خالصه

www.ParsBook.org

Page 4: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 4

To IRANPHP’s members, for being world’s best forum.

Masoud Amjadi

www.ParsBook.org

Page 5: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 5

:وبت خفف ث وبس سفت دس ای مب

OO = Object Oriented ؿی شایی

OOP = Object Oriented Programmin ثشب یؼی ؿی شا

PRP = Property (پشپشتی) ـخل

www.ParsBook.org

Page 6: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 6

ثشای تػؼ دذبی ثبؿذ تاذ ضػی یذ وذشا ی تػؼ ی ش افضاسی ؿی

ثشای ثشب یؼی اػتفبد ی وشدذ، اب الص یؼت (Procedural)اص سؽ سی ای و لجال

سؽ بی وشد بؽسا و OOدس ای مب ؿب ثشخی اص تئسی بی پبی ی .ای ثبؿذ

OOی آصیذ و چشا ثبیذ اص تىیه بی چی ؿب. چذ ثشبی سا خایذ آخت

اػتفبد ویذ چ ای تىیه ب ػشػت تػؼ ی ثشب بی پیچیذ ی ؿب سا ثؼیبس ثجد

ی ثخـذ خایذ دیذ و تغییش داد وذبیی و ثب ای سؽ ؿت ؿذ اذ چمذس آػب

. اػت

ترنامه نویسی شی گرا چیست؟

یبص داسد تب ؿب سؽ فىش وشد دس سد ح ی ػبخت ( OOP)شا ثشب یؼی ؿی

اؿیب ؿب سا لبدس ی ػبصذ تب وبسب، سذ ب ایذ بی دیبی الؼی . ثشب بیتب سا تغییش دیذ

ث ربی . سا ث خبعش آب ؿت ایذ خیی خة تػظ وذب ذ ػبصی ویذسا و ثشب تب

ب سا ث كست یه سؿت وتشی ثجییذ و داد ب سا اص یه تبثغ ث دیشی تم ایى ثشب ت

ث ؿب وه یىذ تب ثشب تب سا ث ػا زػ ای اص اؿیبی ب ذ OOPی وذ،

.ػبصی ویذ و ش وذا اص آب ث كست زضا اص دیشا وبسبی خبكی سا ازب ی دذ

وبس یىذ ػی ت ی ؿد، وؾ ب ثب ، صبی و یه خب ػبخث ػا خب

آپش اػت 01 وؾ ب یبصی ذاسذ ثذاذ و آیب رشیب ذاس بی اتبق خاة . وؾ ب ثب ػی

پیبىبس غئ اػت و ش وؼی دس . آب تب ثبیذ شا وبسبی خد ثبؿذ آپش؟ 01یب

یض ش OOPدس . سبی خد اػت یبصی ذاسد دس رشیب سیض وبسی ب لشاس ثیشدحب ازب وب

چی ازب وبسب تػظ یه .سا اص دیش اؿیب خفی ی داسد ؿی رضئیبت پیبد ػبصی خد

تب آچ و ایت داسد ػشیؼی اػت و آ .یچ سثغی ث دیش اػضبی ػیؼت ذاسد ،ؿی

. ائ دذؿی ی تاذ اس

www.ParsBook.org

Page 7: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 7

پیبد ػبصی ی دس ثشب بیتب والع ب، اؿیب، سؽ بیی و ؿب ای ایذ ب سا

ثشب یؼی تضبدوبال دس الغ ای وبس. ؼتذ OOPویذ، اػبػی تشی ایذ بی پـت ػش

ب عس و. ؿذ اػتفبد ی( Global)سی ای اػت و دس آ اص تاثغ ػبختبس بی وی

ضایبی ثؼیبس ی ؼجت ث ثشب یؼی سی ای داسد ثب پیبد OOخایذ دیذ یه دیذب

یض ادا یبفت، php6و دس اازب شفت php5و ثشای ای ثبس دس OOػبصی رذیذ

. ثشخی اص ػىشد بی ثضسي ثجد پیذا وشد اذ

مسایای ترنامه نویسی شی گرا

ی ، ساحتی تجذی احتیبربت تزبسی ث بط بی وذ OOPضیت بی اػبػی یىی اص

ؿب سا لبدس ی ػبصد تب ثشب بیتب سا ثش اػبع اؿیبی دیبی OOPو سیىشد ییاص آزب .ثبؿذ

ؿب ی تایذ یه ساثغ ی ؼتمی ثی شد، اؿیب، فبی والع ،الؼی ذ ػبصی ویذ

داسذ و آب سا سفتبس اؿیبی الؼی ساای والع ب ب یظی ب .ویذبی اسص تؼشیف

و ثبیذ ؿت تب خیی ػشیغ ساحت وذ بیی ـب ی دذ؛ ای اش ث ؿب وه ی وذ

. ح ی استجبط ارضای ختف ثشب سا ؼی ویذ چی ؿذ

ؿب دائب ث داد بی یىؼبی دس . وذ اػت تابیی اػتفبد ی دثبس اص OOPضیت د

ثشای خب، ثشب ای سا دس ظش ثیشیذ و یه . ثخؾ بی ختف ثشب یبص خایذ داؿت

ای ثشب ؼب ث والػی ثب ب . اػبد ثیبساؾ سا ذیشیت وذثیبسػتب سا لبدس ی ػبصد تب

person بی افشادی ی ثبؿذ و دس اش شالجت اص ثیبس ای والع ؿب ت. یبص خاذ داؿت

دس ش ... . خد ثیبس، دوتش ب، پشػتبسا، ذیشا ثیبسػتب، ؼئی ثی : مؾ داسذ، ؿب

، شح اص شالجت، الص اػت تب یبدداؿتی دس سد فشدی و وبسی سا ثشای ثیبس ازب ی دذ

ثب تؼشیف یه آیب آ فشد اربص ازب آ وبس سا داسد یب ؟لشاس یشد چی ثشسػی ؿد و

و ؿب ـخلبت وبس بی ؼ تبی ای افشاد ی ثبؿذ، personوالع ػی ثب ب

www.ParsBook.org

Page 8: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 8

ؿب ثخؾ ثضسی اص وذ سا لبث اػتفبد زذد ی ویذ ی تایذ اص آ چذی ثبس اػتفبد

. دس ثشب یؼی سی ای اىب پزیش یؼتویذ، دس حبی و ای وبس یـ

دس سد ثشب بی دیش چ؟ فىش ی ویذ دس چذ ثشب ی تا اص ای والع

person اب اص یه والع . اػتفبد وشد؟ ؿبیذ تؼذاد ویperson و اكی ؿت ؿذ ثبؿذ

.دس دیش پشط ب اػتفبد وشد ثب اذوی تغییش یب ؿبیذ ثذ یچ تغییشی، ث ساحتی یتا

اػتفبد چذ ثبس اص وذ دس ثشب ی ؿت " ی ثبؿذ؛ OOPای یىی اص ثضستشی ضیت بی

".ؿذ چی دیش ثشب ب

( bug)اش ؿب اؿىبی . اص پیب ای ثد والع ب حبك ی شدد OOPضیت دیش

خایذ یه تبثغ ث آ ثیفضاییذ یب یىی اص تاثؼؾ سا تغییش پیذا ویذ یب ث personسا دس والع

تبی وذ بی والع دس یه فبی رخیش ی ؿذ ش .دیذ؛ تب ثبیذ ث یه رب شارؼ ویذ

ای ضیت ث عس فق اؼبد ای رؼتز ث . تغییشی دس آب فسا دس و ثشب بیب ی ؿد

.ییشات دس ثشب سا آػب ی وذدجب اؿىبالت یب ایزبد تغ

یک مثال واقعی

اش چ ضایبی پیب ای ى اػت دس یه ثشب ی وچه بچیض ث ظش ثشػذ، اب دس

یىی اص یؼذب ای . ؼبسی یه ش افضاس پیچیذ ای ضایب خیی ثضسي خاذ ثد

وبس ی وذ ث ساحتی ی phpسی ای وذ 200,000وتبة ثش سی پشط ای ؿب ثیؾ اص

دسكذ اص صب سفغ اؿىب ثشای یبفت ربی تاثغ دس وذ چی فیذ ایى 56تا فت

پیبد ػبصی دثبس ب ش افضاس ثب .ای داد سا وذا تبثغ تیذ وشد اػت، ػپشی ی ؿد

OOپیبد ػبصی ثب ؼبسی .بثذثبػج ؿذ تب وذ ب ث عس چـیشی وبؾ ی OOؼبسی

تب ثبػج وبؾ وذ ب ؿذ، ثى تؼذاد اؿىبالت ثشب صبی و ثشای سفغ اؿىب سد یبص ثد

.یض ثؼیبس وبؾ یبفت

www.ParsBook.org

Page 9: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 9

ش ثشای تػؼ ی ش افضاس داسذ، و ؼال پشط بی ثضسي اغت یه تی چذ ف

ضیت OOدس ایزب یض یه سیىشد .ستی ختف ؼتذتشویجی اص ثشب یؼب ثب ػغح ب

اؿیب رضئیبت پیبد ػبصی خد سا اص وبسثشاـب . بی ی ؼجت ث ثشب یؼی سی ای داسد

ف ػبختبس بی پیچیذ ی اعالػبتی تبی ثبثشی ثذ یبص ث . خفی ی داسذ

ی تاذ اص اؿیبیی و دیش اػضبی ثب تزشث ی خلكیبت غك تزبسی، اػضبی تبص وبس تی

خد اؿیب ؼئ تغییشاتی و ثش سی داد ب كست ی یشد .تی دسػت وشد اذ اػتفبد وذ

. ضؼیت ػیؼت ؼتذ

بی و ص ثشب ثضسي اؿبس ؿذ دس ثبال ثب اػتفبد اص وذبی سی ای ؿت ؿذ

ی وـیذ تب اػضبی رذیذی و ی خاػتذ ث تی ثپیذذ ثب ثشب آؿب ثد، اغت د ب ع

ثؼذ اص ایى ثشب ثب اؿیب پیبد ػبصی ؿذ، اػضبی رذیذ ؼال . ؿذ ثتاذ فیذ الغ ؿذ

آب ی تاؼتذ حتی پیچیذ تشی اؿیب سا ث . ث ثیؾ اص د سص ثشای ف ثشب یبص ذاؿتذ

. اػتفبد وذ، چ یبصی ث داؼت رضئیبت تاثغ پیبد ػبصی آب ذاؿتذ ػشػت

ث ػا سؽ ثشب یؼیتب OOاو ؿب دی بػجی ثشای اػتفبد اص ای

. داسیذ

جنثه های ترنامه نویسی شی گرا

افؼب آب ی ی ثخؾ ث ؼشفی اك ای ی ثشب یؼی ؿی شا چی فؼ ا

:دس ای ثخؾ ث ضػبت صیش ی پشداصی. پشداصد

عشح ای یه ؿی وذی و ـخلبت تذ بی آ سا تؼشیف ی :کالس ها

.وذ

ؿب تبی داد بی داخی اعالػبتی اػت بیی اص یه والع و :اشیا

.و ثشب ی ؿب ث آب یبص داسد

www.ParsBook.org

Page 10: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 10

خ )ؼشیف یه والع ث ػا صیشوالػی اص یه والع دیش تابیی ت :وراثت

.(ایى ثیی شثغ خد ػی ؼتغی اػت

چنذ ریختی(Polymorphism:) اربص ی تؼشیف یه والع ث ػا ػضی

"ؿی تسداس اػت"بؿی یه : ثشای خب)اص چذ عجم ثذی والػی

("ؿی چشخذاس"یه

ای ـخق وشد ایى یه ؿی ی تاذ یه وبس سا ازب سؿی ثش :واسط ها

ثشای خب، یه . )دذ، ثذ ایى دلیمب ح ی ازب آ وبس سا ـخق وی

اؿیبیی ؼتذ و ی تاذ سا ثشذ، اب آب ای وبس سا ثؼیبس ػ یه اؼب

.(تفبت ازب ی دذ

یشی اص دػتشػی دیشا ث اعالػبت تابیی یه ؿی ثشای ر :کپسول سازی

.داخی اؽ

سؿی سا و دجب ی . اش ثشخی اص ای رج ب ـى ث ظش ی سػذ، شا جبؿیذ

داؾ رذیذی و یبفت ایذ ى اػت ث عس وب سیىشد . ویذ چیض سا سؿ خاذ وشد

. تػؼ ی ش افضاسی ؿب سا تغییش دذ

کالس ها

یه بؿی س، استفبع، یه . داسذ خبف خد سا سفتبس دیبی الؼی اؿیب ـخلبتدس

یه بؿی ی .ای ب ـخلبت یه بؿی ؼتذ. ػبصذ یه ثبن ثب حز ـخق داسد

ای ب سفتبسی ؼتذ و یه . تاذ ؿتبة ثیشد، ثبیؼتذ، ساب ثضذ یب ثب ثق ـذاس دذ

. ای ـخلبت سفتبس ب دس سد تبی بؿی ب كذق ی وذ .ی دذبؿی اص خد ـب

اش چ د بؿیی و دس یه رب وبس پبسن ى اػت س بی تفبتی داؿت ثبؿذ، ی

ؿب سا OOPی یذ، classثب اػتفبد اص ػبختبسی و ث آ . ی بؿی ب س داسذ

یه والع وذ احذی اػت و .سا ثب ـخلبت ثبال پیبد ػبصی ویذ بؿییلبدس ی ػبصد تب

www.ParsBook.org

Page 11: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 11

ی تاذ carوالػی ثب ػا .ـخلبت سفتبس تبی اػضبی یه زػ سا تؼشیف ی وذ

. ـخلبت تذ بی ؼ تبی بؿی ب سا تؼشیف وذ

ی یب ب خاف Properties، ث ـخلبت یه والع OOPدس اكغالحبت

ب ش وذا یه اػ یه PRP .(ـب خای داد PRPسا ثب بد Propertyدس ادا )یذ

ثشای .ثشخی اص آب اربص ی دذ مبدیشؿب تغییش وذ ثشخی اربص ی دذ. مذاس داسذ

اشچ س بؿی سا . سا داؿت ثبؿیذ car weightبی PRPى ؿب carخب دس والع

فشم ویذ و )ی تا ثب دثبس س وشد تغییش داد، اب ص بؿی مذاس حبثتی خاذ داؿت

.(ث بؿی ثبس یب ؼبفشی اضبف شدد

ب خاكی اص state. ؿی سا ـب ی دذ (state)ب ضؼیت حبت PRPثؼضی اص

ث تبیی تغییش ی وذؿی سا ـخق ی وذ و ثب تر ث لع اتفبلبت خبكی مذاسؿب

، دس ثشب ای و ػىشد یه بؿی سا ؿجی ػبصی ی وذ. ی تاذ مذاس خد سا تغییش دذ

ػشػت بؿی تغیشی .داؿت ثبؿذ (ػشػت) velocityثب ب PRPیه carى اػت والع

ی و ث تس ی سػذ، ، ثى ثب تر ث مذاس ػختیؼت و ثتاذ ث تبیی تغییش وذ

. ػىشد تس صیی و بؿی دس سی آ دس حب حشوت تغییش ی وذ

ـبث ب تاثؼی OOPتذ ب دس .ی یذ( Method)سفتبس بی والع سا تذ

ب یض ی تاذ ش بذ تاثغ، تذ .ؼتذ و دس ثشب یؼی سی ای ػتی رد داؿت

ب سی داد بیی وبس ی وذ و تذ ثؼضی اص. سا و خاػتذ ثیشذ اص ش ػی بساتشچذتب پ

بی PRPآب چی ی تاذ ثش سی .اسػب ی شدد ث ػا پبساتش اص ثیش ث آب

.یه اوـ خبف اص تذ اػتفبد وذ یب اص آب ثشای فؼب وشد اؿیبی خد یض وبس وذ

یااش

و لشاس ثشای ؿشع ی تایذ والع سا بذ یه مـ ی ػبختبی دس ظش ثیشیذ

ب عس و ی تا چذی خب اص یه مـ دسػت وشد، ؿب. اػت اص آ اؿیبیی ػبخت ؿد

www.ParsBook.org

Page 12: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 12

ػبختب ی دای و مـ. یض ی تایذ ش چذتب ؿی و خاػتیذ اص یه والع ثؼبصیذ

.ی وذ؛ ثى كشفب رد آب سا تؼیی ی وذدیاسب یب وف صی سا ـخق رضئیبت س

والع ـخلبت سفتبس اؿیب سا ـخق ی وذ اب . والع ب ثؼیبس ؿجی ث ای وبس ی وذ

ردیتی اػت و ثب تر ث objectیه ؿی یب . ضشستی ذاسد و ث آب مذاس یض ثذذ

سا والع خب ی خد سا یه ؿی دس ظش خبؿب ی تایذ . ؿذ اػتمـ ی والع ػبخت

.ثیشیذ

ثب اػتفبد اص مـ ای و دس دػت داسیذ وی لبح ػبختبی ؿب ی تایذ یه

. ی یذ Instantiation، ث فشآیذ ایزبد ؿی ثب اػتفبد اص والع OOPدس . خب ثؼبصیذ

: چیض یبص داسیذثشای تیذ یه ؿی ث د

ای وبس سا . حبفظ ای و ؿی ػبخت ؿذ دس آ لشاس ثیشدphp ث عس اتبتیه ثشای

. ؿب ازب ی دذ

داد بیی و ثبیذ ث ػا مبدیشPRP ای داد ب ی تاذ .ب دس ؿی ربیضی شدذ

یب اص دیش بثغ ث دػت اص یه دیتبثیغ خاذ ؿذ یب اص اؿیبی دیش شفت ؿذ

.آیذ

ذ ی تاتب ای مبدیش . سا داؿت ثبؿذ stateب یب PRPیه والع شض ی تاذ مبدیش

ؿب ثبیذ ا ثب اػتفبد اص مـ خب سا ثؼبصیذ، ػپغ ث دیاس بیؾ س .دس اؿیب لشاس ثیشذ

ؿب ثبیذ ثب اػتفبد اص والع ؿی سا اثتذا تشتیتث ی .ثضیذ یب وبسبی دیش سا ازب دیذ

ای و وزب اص .بیؾ اػتفبد ویذ یب تذ بیؾ سا فشاخای ویذ PRPػپغ ثتایذ اص ثؼبصیذ

، ؼب ایؼت و بی ثبػج ػشدسی تبص وبسا objectاػتفبد وی وزب اص classاط ی

. ی ؿد OOPدس

ایزبد ؿذ ی تا اص ثشای پیبد ػبصی احتیبربت تزبسی ثشب ثؼذ اص ایى یه ؿی

.ثشسػی وی phpاربص ثذیذ ح ی ازب ای وبسب سا دس . اػتفبد وشد

www.ParsBook.org

Page 13: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 13

ایجاد یک کالس

class.Demo.phpوذ صیش سا دس فبیی ثب ػا . اص یه خب ػبد ؿشع ی وی

:رخیش ویذ<?php

class Demo {

}

?>

اشچ ص صیبد یزب ایض ـذ اػت، اب .سا ایزبد وشد ایذ Demoاو ؿب والع

اػتفبد classاص ویذ اط ی . سا ـب ی دذ phpوذ ثبال ح ی تؼشیف یه والع رذیذ دس

ثؼذ اص آ اػ والػتب . ثفذ و ؿب تلی داسیذ یه والع رذیذ ایزبد ویذ phpویذ تب

.یؼیذ ؿشع پبیب وذ والع سا ثب آوالد بی ثبص ثؼت ـخق ویذسا ث

یه . ثؼیبس اػت و لشاسدادی ثشای تؼشیف فبی بی ػسع وذ خد داؿت ثبؿیذ

:سؽ خة ای اػت و ش والع سا دس فبیی ث اػ خدؽ رخیش ویذ ث كست صیش

class.[ClassName].php

:ثؼبصیذ Demoص وذ صیش یتایذ یه ؿی اص والع ؿب ثب اػتفبد ا

<?php

require_once(„class.Demo.php‟);

$objDemo = new Demo();

?>

ثفبیذ و فبی phpث ()require_onceثشای ایزبد یه ؿی اثتذا ثب اػتفبد اص

اص آ، ؿی رذیذ سا ب والع ثؼذ newػش والع ؿب دس وزب لشاس داسد، ػپغ ثب فشاخای

مذاسی سا و ای ر ثش ی شداذ ث یه تغیش رذیذ و دس ای خب . ایزبد ویذ

$objDemo او ؿب ی تایذ تذ بی ؿی .ی ثبؿذ، ؼجت دیذ$objDemo سا

. بی آ دس كست رد مذاس ثذیذ PRPفشاخای ویذ یب ث

www.ParsBook.org

Page 14: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 14

ایذ فؼال یچ وبس خبكی ازب ی دذ، اب ث دسػتی اشچ والػی و ؿب تؼشیف وشد

. تؼشیف ؿذ اػت

افسودن یک متذ

اش تاذ وبسی ازب دذ ث یچ دسدی ی خسد، پغ ثیبییذ ثجیی Demoالع و

ث یبد ثیبسیذ و تذ بی والع ب تاثغ یب . چ ی تای یه تذ ث آ اضبف وی

function ث . ثب ؿت یه تبثغ دس داخ والع ؿب یه تذ ث آ اضبف وشد ایذ .تذب ؼ

:خب صیش تر ویذ

<?php

class Demo {

function sayHello($name) {

print “Hello $name!”;

}

}

?>

سا sayHelloؿی ای و اص والع خد ػبخت ایذ او لبدس اػت ث وؼبی و تذ

ثشای دػتیبثی ث <-ش ػی تایذ اص objDemo$دس ؿی . ی ی وذ، ػال وذفشاخا

:تذب اػتفبد ویذ

<?php

require_once(„class.Demo.php‟);

$objDemo = new Demo();

$objDemo -> sayHello(„Masoud‟);

?>

وؼبی . بس ی سدبی اؿیبی ؿب ث و PRPثشای دػتشػی ث تبی تذ ب <-ػش

دس دیش صثب بی ثشب یؼی وبس وشد اذ ثبیذ تر وذ و یـ OOPو لجال ثب ف

اكال دس ( . )ب اػتفبد وذ ػش مغ PRPثشای دػتیبثی ث تذ ب <-ثبیذ اص ػش

. تؼشیف ـذ اػت OOشاش

www.ParsBook.org

Page 15: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 15

PRPافسودن یک

ؿب ث ػبدی . ع یض ث ب آػبی افضد تذ ی ثبؿذث وال PRPافضد یه

صبی و دس ثشب یؼی . سا داسد PRPتغیشی سا دس داخ والع تؼشیف ی ویذ تب مذاس

OOPدس . سی ای ی خاػتیذ مذاسی سا رخیش ویذ آشا ث تغیشی ؼجت ی دادیذ

ای . سا رخیش ویذ اص تغیش ب اػتفبد ی ویذ PRPصبی و ؿب ی خایذ مذاس یه

اش تغیشی ثب ػا . اػت PRPب تغیش ب ب . تغیش ب دس اثتذای والع تؼشیف ی ؿذ

$color ثبؿذ، بPRP ای ثب ػاcolor خای داؿت .

:ویذسا ثبص وشد تغییشات ـخق ؿذ صیش سا دس آ اسد class.Demo.phpوالع

<?php

class Demo {

public $name;

function sayHello() {

print “Hello $this -> name!”;

}

}

?>

ی Demoثشای والع nameای ث ػا PRPبیذ ی name$دس وذ ثبال تغیش

. اػتفبد ویذ <-یض ؿب ثبیذ اص ػش PRPثشای دػتیبثی ث ای . ثبؿذ

:ایزبد وشد وذ صیش سا دس آ لشاس دیذ testdemo.phpی رذیذی ثب ب فب<?php

require_once(„class.Demo.php‟);

$objDemo = new Demo();

$objDemo -> name = „Masoud‟;

$objAnotherDemo = new Demo();

$objAnotherDemo -> name = „Ed‟;

$objDemo -> sayHello();

$objAnotherDemo -> sayHello();

?>

www.ParsBook.org

Page 16: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 16

Hello"د ر ی . فبی سا رخیش وشد ػپغ ثب اػتفبد اص شسشتب ثبص ویذ

Masoud" "Hello Ed" دس كفح چبح خاذ ؿذ .

ث والع ی فبذ و ؿب ی خایذ ث ای تغیش اص خبسد publicاط ویذی

ثشخی اص تغیش بی والع تب ثشای دػتشػی خد والع . والع یض دػتشػی داؿت ثبؿیذ

privateؼتذ دیشا جبیذ ث آب دػتشػی داؿت ثبؿذ، ثشای تؼشیف ای ع تغیش ب اص

sayHelloتر ویذ و دس خب ثبال ح ی ػىشد تذ . اػتفبد ی وی protectedیب

. ی یشد PRPسا اص nameثیشد، مذاس تغییش وشد ث ربی آى یه پبساتش

اػتفبد وشدیذ، دس تیز ؿی ی تاذ ث اعالػبت خدؽ دػت this$ؿب اص تغیش

ثشای خب ى اػت ؿب چذی ؿی اص یه والع داؿت ثبؿیذ، دس ای كست چ . پیذا وذ

ثشای اؿبس ث this$ذ اص ی دایذ دس ادا ی اػ تغیش یه ؿی چ خاذ ثد، ی تای

. ی وی اػتفبد ویذ

فشاخای دؾ مذاس Masoudمذاس sayHelloدس خب لجی فشاخای ا تذ

Ed ای ثذی دی اػت و تغیش . سا چبح ی وذ$this ث ش ؿی ای اربص ی دذ تب ث

PRP اػ تغیشی و آ سا ایى الص ثبؿذ ب تذ بی خدؽ دػتشػی داؿت ثبؿذ، ثذ

ب ثش سی ػىشد تذ PRPلجال دیذیذ و ثشخی اص . ثذاذ ثشب ی خبسری ـب ی دذ، دس

یبص داؿت carوالع accelerateبی خبكی تبحیش ی زاؿتذ، بذ خبی و دس آ تذ

ثبیذ اص وذی ـبث وذ صیش ثشای accelerateدس داخ تذ . تب مذاس ػخت ثبلی بذ سا ثذاذ

. اػتفبد وشد PRPدػتیبثی ث آ $this -> amountofFuel;

دس . اػتفبد ویذ $ب ثبیذ فمظ اص یه ػالت PRPتر ویذ و ب دػتشػی ث

اػتفبد obj -> property$غظ ثد ث ربی آ ثبیذ اص obj -> $property$تیز وذ

.وشد

www.ParsBook.org

Page 17: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 17

بی والع سا ی داسذ، ى اػت تغیش بی PRP ثش تغیش بیی و مبدیش ػال

ث ػا تغیش ای تغیش ب ع ش د. دیشی یض ثشای وبس بی داخی خد والع تؼشیف ؿذ

ب اص خبسد والع یض PRPثشخی اص ای تغیش ب دس لبت . بی داخی والع ؿبخت ی ؿذ

ثشای خب اش والع . ثمی آب تب ثشای وبسبی داخی خد والع ؼتذ. تیبثی ؼتذلبث دػ

car ،اعالػبت شثط ث اتلب سا ث ث ش دیی یبص داؿت ثبؿذ تب اعالػبتی سا اص دیتبثیغ ثخاذ

ؼتذ ثشای بؿی ی PRPچشا و ای اعالػبت ث ػا . ػا تغیش بی داخی ی داسد

. اب والع ثشای ازب فؼبیت بی خبكی ث آب یبص داسد

حفاظت از دسترسی ته متغیر های عضو

ی PRPظس ب ) nameب عس و دس خب لج دیذیذ ؿب ی تایذ ث

تر ویذ و. سا ثذیذ... ش مذاس ؼتجشی اص ر ؿی، آسای ای اص اػذاد، یه فبی ( ثبؿذ

دیش فشكت ثشسػی كحت داد بی آ یب ثشصسػبی PRPؿب ثؼذ اص ؼجت داد مذاسی ث

. آب خایذ داؿت

get [property name]ب سا ثب اػتفبد اص د تذ PRPثشای غج ثش ای ـى یـ

set [property name] ذ و دس خب ای تاثغ سا تذبی دػتیبثی ی ب. پیبد ػبصی ویذ

سا غبثك وذ صیش class.Demo.phpفبی .پبیی ح ی اػتفبد اص آب ـب داد ؿذ اػت

:تغییش دیذ

<?php

class Demo {

private $_name;

public function sayHello() {

print “Hello” . $this -> name . ”!”;

}

public function getName() {

return $this -> name;

}

www.ParsBook.org

Page 18: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 18

public function setName($name) {

if (!is_string($name) || strlen($name)==0) {

throw new Exception(“Invalid name value!”);

}

$this -> name = $name;

}

}

?>

:یض تغییشات صیش سا اػب ویذ testdemo.phpدس فبی

<?php

require_once(„class.Demo.php‟);

$objDemo = new Demo();

$objDemo -> setName(„Masoud‟);

$objDemo -> sayHello();

$objDemo -> setName(37); // برای این مورد خطا خواهد داد

?>

تغییش پیذا وشد privateث publicاص nameب عس و دیذیذ ػغح دػتشػی

دس _والع اص privateپیـبد ی ؿد ثشای ب ضاسی اػضبی . ع ؿذؿش _ػ آ ثب یه ا

یچ یبصی ث ای ح ی ب ضاسی ذاسد ای phpدلت ویذ و .اثتذای آ اػتفبد ویذ

ث وذ بی خبسد اص والع اربص ی privateویذ اط ی . كشفب لشاسدادی ثشای ب ضاسی اػت

اص خبسد والع privateمبدیش اػضبی داخی . تب ثتاذ مبدیش ای تغیش سا تغییش دذ دذ

()getName() setNameلبث دػتیبثی یؼتذ ث ی دی ؿب زجسیذ اص تذ بی

ثشای دػتشػی ث ای اعالػبت اػتفبد ویذ، دس ػی حب غئ خایذ ثد و والع ؿب

. كحت مبدیش ؼجت داد ؿذ سا لج اص اتؼبة ثشسػی وذی تاذ

ؼجت داد ؿد یه اػتخب ثششداذ ی nameدس ای خب اش مذاس بؼتجشی ث

اش ثشای یه . افضد ؿذ اػت publicچی ثشای دیش اػضبی والع ػغح دػتشػی . ؿد

دس ظش شفت publicمذاس آ ػض والع ػغح دػتشػی ـخق ـد ث كست پیؾ فشم

. ی ؿد، اب ثتش اػت ثشای تشی و ؿذ تبی ػغح دػتشػی ب سا ـخق ویذ

www.ParsBook.org

Page 19: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 19

public، privateػ ػغح دػتشػی ختف ثشای اػضبی والع رد داسد،

protected . اػضبیpublic اػضبی . ثشای تبی وذ ب لبث دػتیبثی ؼتذprivate تب

لبث دػتیبثی ثشای خد والع چی والع protectedخد والع ؼتذ اػضبی ثشای

(.دس ادا ی ی مب ث جحج ساحت پشداخت ی ؿد. )بیی و اص آ اسث ی ثشذ، ؼتذ

بی والع، ؿب PRPث تبی ( accessor methods)تذ بی دػتیبثی فضدثب ا

حتی اش . ب ثشص سػبی آب دس آیذ سا ثؼیبس آػب تش ی ویذاىب ثشسػی كحت داد

ثشب ی وی ؿب یبصی ث ثشسػی كحت داد ب یب ثشص سػبی آب ذاؿت ثبؿذ، ثبص ؿب

چشا و ثؼذ ب ث آ . بی خد اػتفبد ویذ PRPثبیذ اص تذ بی دػتیبثی ثشای پیبد ػبصی

. خایذ وشداسد یبص پیذا

مقذاردهی اولیه ته اشیا

ثشخی تظیبت ای ث ب ثشای اغت والع بیی و خایذ ؿت، ؿب ث ازب

ثشای خب ى اػت الص داؿت ثبؿیذ . ایزبد ثؼضی اص اؿیب ثشای ای ثبس، یبص خایذ داؿت

ثب ایزبد تذ خبكی و . ذاس ای ثذیذب م PRPمبدیشی سا اص دیتبثیغ ثخایذ یب ث ثؼضی اص

constructor یب ػبصذ ب داسد دسphp ثب فشاخای تبثغ_construct() پیبد ػبصی ی

خدؽ ث عس اتبتیه ث ب ػبخت php. ؿد، ؿب ی تایذ ای وبسب سا ازب دیذ

سا ث Demoب ی تایذ والع ثشای خب ؿ. یه ؿی ای تبثغ خبف سا فشاخای ی وذ

:كست صیش ثبصیؼی ویذ

<?php

class Demo {

private $name;

public function _construct($name) {

$this -> $name;

}

function sayHello() {

print “Hello $this -> name!”;

www.ParsBook.org

Page 20: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 20

}

}

?>

ای سؽ ث یه php5دس . خد والع ثدذ، ػبصذ ب تاثؼی ثب اػ php4دس

یؼی ثشای تبی والع ب اص یه ع ػبصذ ثب اػ . اػىبی یىپبسچ تجذی ؿذ اػت

ث دجب تبثؼی ثب ب phpثشای بی ثب ؼخ بی لجی اثتذا . ـخق اػتفبد ی ؿد

_construct() جب تبثؼی اػ ثب والع ی ی شدد، اب اش چی تبثؼی پیذا ىشد ث د

اش چ ای (. ی شدد ()public function Demoدس خب ثبال ث دجب تبثؼی ثب ب )شدد

یض رد داسد، اب یچ تضیی ثشای ؼخ بی ثؼذی php6ػبصبسی ثب ؼخ بی لجی دس

.ثبثشی ثتش اػت اص سؽ رذیذ اػتفبد ویذ. رد ذاسد

ؿب والػی داسیذ و ث یچ مذاس دی ای ای یبص ذاسد، ضی ذاسد و اص ػبصذ اش

خدؽ تب وبسبی الص php دیذیذ، Demoب عس و دس سط ا والع . اػتفبد ویذ

اص تبثغ ػبصذ تب صبی و ث آ یبص داسیذ اػتفبد . ثشای ایزبد یه ؿی رذیذ سا ازب ی دذ

. ویذ

اشیا تخریة

:اؿیبیی سا و ایزبد ی ویذ دس ػ حبت صیش اص ثی ی سذ

صبی و وبس ثب كفح ی سد ظش تب ؿد.

صبی و مبدیش اص حص ی تؼشیف خد خبسد ؿذ.

یب صبی و مذاس NULL ث آب داد ؿد.

سا ذیشیت وشد ( object destruction)اؿیب تخشیتؿب ی تایذ فشآیذ php6دس

ثشای ازب ای وبس . اؿیب كست ثیشد، ازب دیذ تخشیتالذابتی سا و ی خایذ ث ب

ؿی تخشیتاش ای تبثغ سا ایزبد ویذ لج اص . ثؼبصیذ destruct_تبثؼی ثذ پبساتش ثب ػا

. ث عس اتبتیه فشاخای ی ؿد

www.ParsBook.org

Page 21: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 21

ص ای تبثغ ث ؿب ای اىب سا ی دذ و ش وبسی سا و دػت داسیذ دس اػتفبد ا

یب ثشای خب اتلبالت ث دیتبثیغ سا لغغ وشد . ؿی ازب دیذ تخشیتحظبت آخش لج اص

. فبی بی ـد ؿذ سا ثجذیذ

ییشی وشد بی یه ؿی سا اص دیتبثیغ ی خاذ اش ش وذا اص آب تغ PRPخب صیش

ثشای ای وبس . آ ؿی ث عس اتبتیه دس دیتبثیغ رخیش ی وذ تخشیتآ تغییش سا ث ب

چی اتلب دیتبثیغ سا ( destructor) خشة .یبص ث فشاخای یه تذ ثشای رخیش داسی

.لغغ ی وذ

PostgreSQLفش دس ای خب دیش خب بی و دس آ ث دیتبثیغ یبص اػت اص پت

یؼذب ای احش ث عس رذی ؼتمذ ؼتذ و یظی بی ثشتش، تابیی . اػتفبد ؿذ اػت

سا PostgreSQLدس رخیش ی اعالػبت، PostgreSQL ىبیؼ لی حبیت اص تشاوؾ ب

ثشای دیش ػیؼت بی ت ثبص، MySQLؼجت ث دیش ػیؼت بی ذیشیت دیتبثیغ خ

سا ثش سی ػیؼت خد PostgreSQLاش ؿب پتفش . ثشتشی ی ثخـذازب وبس بی ثضسي،

ذاسیذ یب ث ش دیی دیش ػیؼت ب سا ی پؼذیذ، ث ساحتی ی تایذ وذ بی دیتبثیغ سا

.ث وذ بی پتفش خد تغییش دیذ

:ث كست صیش دسػت ویذ widgetرذی ث اػ CREATE TABLE “widget” {

“widgetid” SERIAL PRIMARY KEY NOT NULL,

“name” varchar(255) NOT NULL,

“description” text

};

:داد بیی سا اسد آ ویذINSERT INTO “widget” (“name” , “description”)

VALUES („Foo‟ , „This is a footacular widget!‟);

:دسػت وشد اعالػبت صیش سا دس آ اسد ویذ class.Widget.phpوالػی ثب ػا <?php

class Widget {

private $id;

www.ParsBook.org

Page 22: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 22

private $name;

private $description;

private $hDB;

private $needsUpdating = false;

public function _construct($widgetID) {

//The widgetID parameter is the primary key of a

//record in the database containing the information

//for this object

//Create a connection handle and store it in a private member variable

//This code assumes the DB is called “parts”

$this-> hDB = pg_connect(„dbname=parts user=postgres‟);

if(! is_resource($this-> hDB)) {

throw new Exception(„Unable to connect to the database.‟);

}

$sql = “SELECT \”name”, \”description\” FROM widget WHERE widgetid =

$widgetID”;

$rs = pg_query($this -> hDB, $sql);

if(! is_resource($rs)) {

throw new Exception(“An error occurred selecting from the

database.”);

}

if(! pg_num_rows($rs)) {

throw new Exception(„The specified widget does not exist!‟);

}

$data = pg_fetch_array($rs);

$this-> id = $widgetID;

$this-> name = $data[„name‟];

$this-> description = $data[„description‟];

}

public function getName() {

return $this-> name;

}

public function getDescription() {

return $this-> description;

}

public function setName($name) {

$this-> name = $name;

$this-> needsUpdating = true;

}

public function setDescription($description) {

$this-> description = $description;

$this-> needsUpdating = true;

}

public function _destruct() {

if($this-> needsUpdating) {

$sql = „UPDATE “widget” SET „;

$sql .= “\”name\” = „” . pg_escape_string($this-> name) . “‟, “;

$sql .= “\”description\” = „” .

www.ParsBook.org

Page 23: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 23

pg_escape_string($this-> description) . “‟”;

$sql .= “WHERE widgetID = “ . $this-> id;

$rs = pg_query($this-> hDB, $sql);

}

//We ‟ re done with the database. Close the connection handle.

pg_close($this -> hDB);

}

}

?>

. ایزبد ی وذ postgres وبسثش عشیك اص ، parts دیتبثیغ ث اتلب یه ؿی ای ػبصذ

ای و ث IDمذاس .ای اتلب ثشای اػتفبد بی ثؼذی دس یه تغیش ػض رخیش ؿذ اػت

ث وبس ی سد و اعالػبت queryػا پبساتش ث ػبصذ اسػب ی ؿد ثشای ایزبد یه

widget ػپغ ای اعالػبت ث . ـخق ؿذ ثب ویذ اكی داد ؿذ سا اص دیتبثیغ ی آسد

لشاس سد اػتفبد get setؼجت داد ی ؿذ تب ثؼذا تػظ تاثغ privateتغیش بی ػض

.تر ویذ و اش ش یه اص ای وبسب اؿتجب كست یشذ، ػبصذ اػال خغب ی وذ. ثیشذ

ؿب سا لبدس ی ػبصد تب مبدیش ()getName() getDescriptionد تذ دػتشػی

ث ()setName() setDescriptionث عس ـبث تذ بی . سا ثیشیذ privateتغیش ب

دلت ویذ، صبی و مذاس . اىب سا ی دذ و مبدیش رذیذی سا ث آب ؼجت دیذؿب ای

اش ای تغیش . تغییش ی وذ trueث needsUpdatingرذیذی ؼجت داد ی ؿد، مذاس

. تغییش ىذ، یؼی یچ ث سص سػبی ای الص یؼت

ایزبد وشد اػىشیپت صیش testWidget.phpثشای تؼت وشد وذ ثبال، فبیی ثب ػا

:سا دس آ اسد ویذ

<?php

require_once(„class.Widget.php‟);

try

{

$objWidget = new Widget(1);

echo „Widget Name:‟.$objWidget->getName().‟<br>‟;

echo „Widget Description:‟.$objWidget->getDescription().‟<br>‟;

www.ParsBook.org

Page 24: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 24

$objWidget->setName(„Bar‟);

$objWidget->setDescription(„This is a Bartacular widget!‟);

}

catch (Exception $e)

{

die (“There was a problem”.$e->getMessage());

}

?>

:خاذ ثد ا خشری ـبث صیش سثب ارشای ای فبی دس شسشتب، ثشای ثب

Widget Name: Foo

Widget Description: This is a footacular widget!

:ثشای تبی دفؼبت ثؼذی خشری ث كست صیش خاذ ثد

Widget Name: Bar

Widget Description: This is a bartacular widget!

PRPدیتبثیغ ی یشیذ، ؿب ؿی ای سا اص. دیذیذ و ای وذ چمذس تىیه لذستذی اػت

تبی ای وبس ب تب ثب . آ سا تغییش ی دیذ ث كست اتبتیه دس دیتبثیغ رخیش ی ؿد

اش تغییشاتی كست یشد، ؿب . اتفبق ی افتذ testWidget.phpچذ خظ وذ ػبد دس

رخیش ی ؿذ ای یبصی ث شارؼ ث دیتبثیغ خایذ داؿت اعالػبت دس ػشس دیتبثیغ

. وبس ػىشد ثشب ی ؿب سا دس شاح ثؼذ افضایؾ ی ثخـذ

اش یىی اص اػضبی ثب تزشث . وبسثشا ای ؿی یبصی ث داؼت ح ی وبس وشد آ ذاسذ

سا ثیؼذ، ی تاذ آ سا ث دیش اػضبی تبص اسد تی ثذذ آب widgetتی تػؼ والع

اص آ اػتفبد ی تاذ widgetیب دیش اسد ث وبس سفت دس والع SQLتی ثذ داؼت ح

.وذ

www.ParsBook.org

Page 25: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 25

وراثت

اش ؿب ثخایذ ثشب ای ثشای دفتش داسایی یه فشؿذ ی بؿی ثیؼیذ، احتبال ث

یبص خایذ داؿت و ث بؿی بیی Sedan, PickupTruck MiniVanوالع بیی چ

ثشب ی ؿب تب ثبیذ تؼذاد ثبلی بذ ی ای .ثب ب ػا دس بؿی فشؿی اؿبس وذ

بؿی ب سا داسد، ثى ثبیذ اعالػبت ش وذا اص آب سا یض داؿت ثبؿذ تب فشؿذب ثتاذ

. ای اعالػبت سا ث خشیذاسا ثذذ

Sedan ذ فضبی كذی پـتی چی كذق ػمت دس اػت ؿب ثبی 4یه بؿی

. كذق ػمت ذاسد اب وبسای ثب حز ـخق ث آ ك اػت PickupTruck. سا حجت ویذ

ؿب احتبال ثبیذ یؼتی اص تؼذاد دسبی وـیی تؼذاد كذی ب سا MiniVanثشای یه

.حجت ویذ

ی ثد ش وذا تؼذادی ـخلث ش حب ش وذا اص ای بؿی ب یه ع اتج

ثشای .دس ثشب ؿب خاذ داؿت سا ... چ س، ػبصذ، ذ، ػب تیذ، ؿبس بؿی

ای و غئ ؿیذ تبی والع بی ؿب ای اعالػبت سا داسد ؿب ی تایذ اص آب وپی

ذای مب فتی یىی اص ضیت بی ب عس و دس اثت. شفت دس والع بی خد لشاس دیذ

OOP ثبثشی تب ؿب یبصی ث وپی .اىب اػتفبد ی دثبس اص وذ بی ؿت ؿذ اػت

ب تذ بی ای والع ب دس یىذیش ثب اػتفبد اص PRPوشد وذب ذاسیذ، ثى ی تایذ اص

ب تذ بی والع PRPشای اػتفبد اص ساحت تابیی یه والع ث. ف ساحت اػتفبد ویذ

. اذ ی ثبؿذ

ػپغ . ایزبد ویذ Automobileساحت ؿب سا لبدس ی ػبصد تب یه والع پبی ثب ػا

ؼتذ تبی Automobileؿب ی تایذ ثییذ و تبی والع بی دیش ی ػی

یه اتجی اػت ثبثشی Sedanچ . ذبیی سا و یه اتجی داسد سا داس PRPـخلبت

تؼشیف ؿذ اػت سا ث اسث ی ثشد، ثذ Automobileث عس اتبتیه تبی آچ دس والع

ثب ای سؽ ؿب ی تایذ تبی ـخلبتی و . ایى الص ثبؿذ ؿب یه خظ وذ وپی ویذ

www.ParsBook.org

Page 26: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 26

Sedan داسد دس والعAutomobile ث ػجبست دیش، تب .یؼتذ سا ث ای والع ثیفضاییذ

وبسی و ؿب ثبیذ ازب دیذ تؼشیف وشد تفبت ب ی ثبؿذ تبی تـبثبت اص والع

. جی ث اسث ثشد ؿذ اذات

یه ضیت تتابیی اػتفبد دثبس اص وذ ب یىی اص ضیت بی ساحت ی ثبؿذ، اب ساح

داسیذ و ؿب تذ Customerفشم ویذ والػی ثب ػا . یض داسدثضسي دیش

buyAutomobile بساتش دسیبفت ای تذ یىی اص اؿیبی والع اتجی سا ث ػا پ. ی ثبؿذ

اص آزبیی و تبی .آ تبی اعالػبت شثط ث آ بؿی سا چبح ی وذ وشد تاثغ دس

Sedan ،ب PickupTruck بMiniVan ب اتجی ؼتذ، ؿب ی تایذ اؿیبی ای

چ ش . والع ب سا ث تبثؼی و تظش دسیبفت یه اتجی ث ػا پبساتش اػت، پبع دیذ

ػ والع فت ؿذ اص یه والع وی تش اسث ی ثشذ، ؿب ی دایذ و تبی آب زػ ای

تب صبی و ؿب تب ث ـخلبت ػی بؿی . ذ داؿتاص ـخلبت تذ بی پبی سا خا

سا ث ای تبثغ پبع والع بیی سا و اص والع اتجی اسث ی ثشذیبص داؿت ثبؿیذ، ی تایذ

. دیذ

تبی آب خلكیبت ـتشن ثب یىذیش داسذ، خ . خب شث ب سا دس ظش ثیشیذ

ػال ثش ای ـخلبت ـتشن ش وذا اص آب لذ، س، . ؿىبسوشد خشخشخسد، خاثیذ،

ی ش یبی ثب ع ـخق دس اعشاف اشچ ؿیشب. ع ػجی ػشػت خبف خد سا داسذ

شدـب داسذ، ؼش ی صذ چیتبب پػتی خب خبی داسذ، شث بی ؼی یچ وذا اص

. یابت اص خباد ی شث ب ؼتذای ـخلبت سا ذاسذ ی ش ػ ای ح

ثییذ و ای phpث extendsؿب ی تایذ ثب اػتفبد اص ویذ اط ی phpدس

بی آ والع سا ث PRPوالع صیش زػ ای اص والع دیشی اػت ثبیذ تبی تذ ب

ضاییذ یب تغیش بی رذیذی تاثؼی سا ث آ ثیف ی تایذ یذػتؿب خا اش اسث ثجشد، ایى

. ثشایؾ تؼشیف ویذ

www.ParsBook.org

Page 27: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 27

اش ثخایذ ثشب ای ثشای وبس ثب حیابت ثبؽ حؾ ثیؼیذ، احتبال ث والع بی

Cat ،Lion Cheetah لج اص ؿت وذب، داس والع خد سا دس ظش . یبص پیذا خایذ وشد

Lionداؿت ثبؿذ و صیشوالع بی Catػا داس والع ؿب ثبیذ یه والع اذ ثب. ثیشیذ

Cheetah ؿى صیش داس ؿب سا ـب ی دذ. اص آ اسث ی ثشذ:

Cat

+weight +furcolor +whiskerLenght +runningSpeed +eat() +sleep() +purr() +hunt(objPrey:Prey)

داس والع شث ػبب

ػال ثش آ Lionاسث ی ثشذ، اب والع Catاص والع Lion Cheetahش د والع

PRP ای ثب ػاmaneLength تذی ث ب roar() سا یض پیبد ػبصی ی وذ، دس حبی

.وشد اػت سا اضبف numberofSpotsای ث ب PRPفمظ Cheetahو والع

:لشاس داسد ثبیذ ث كست صیش ثبؿذ class.Cat.phpو دس فبی Catوالع

<?php

class Cat {

public $weight;

public $furColor;

public $whiskerLength;

public $maxSpeed;

public function eat() {

//Code for eating ...

Cheetah +numberofSpots

Lion +maneLenght

+roar()

www.ParsBook.org

Page 28: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 28

}

public function sleep() {

//Code for sleeping ...

}

public function hunt(Prey $objPrey) {

//Code for hunting objects of type Prey which we‟ll not define ...

}

public function purr() {

echo „Purrrrrrrrrr...‟.‟<br>‟;

}

}

?>

. ب تذ بی ؼ شث ػبب سا پیبد ػبصی وشد اػت PRPع ػبد ی ای وال

تب وذ ثبال سا وپی وشد دس آب لشاس Lion Cheetahؿب ی تایذ ثشای ایزبد والع بی

.اب ای وبس د ـى ایزبد ی وذ. دیذ تغییشات الص سا ازب دیذ

Lionآ سا دس والع بی پیذا وشدیذ، ثبیذ Catىی دس والع خؼت ایى اش ؿب ـ

Cheetah ای ثبػج ایزبد وبس اضبف ثشای ؿب ی ؿد. یض تلحیح ویذ .

داسیذ و ث كست صیش ( CatLoverثشای خب )حبیب، فشم ویذ تذی اص یه والع دیش

:اػت

public function petTheKitty(Cat $objCat) {

$objCat -> purr();

}

اشچ داسی ؿیش یب چیتب ث ػا یه حیا خبی اكال ای یؼت، اب اش ثتایذ ث

ثبثشی ؿب ثبیذ . اذاص ی وبفی ث آب ضدیه ؿیذ، خایذ دیذ و آب یض خش خش ی وذ

.ویذ اسػب ()petTheKitty تبثغ ث سا Cheetah یب Lion والعثتایذ ؿی ای اص

ویذ اػتفبد Lion Cheetahثبثشی ؿب ثبیذ اص سؽ دیشی ثشای تؼشیف والع بی

اػ آسد آ اص ثؼذ extends ی و اص اػتفبد ثب. ثبؿذ ی ساحت ثشد وبس ث ب و

www.ParsBook.org

Page 29: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 29

والع بی یظی تبی و رذیذ والع د تایذ ی ساحتی ث ؿب اػت، ثشد اسث و والػی

Cat ویذ اضبف آب ث خایذ ی و سا دیشی بی یظی ویذ ایزبد داسذ سا.

:ؿب ث كست صیش خاذ ثد Lionدس ای خب والع <?php

require_once(„class.Cat.php‟);

class Lion extends Cat {

public $maneLength;

public function roar() {

echo „Roarrrrrrrrrr...‟.‟<br>‟;

}

}

?>

:صیش سا ازب دیذوبس ثب والع ثبال ؿب ی تایذ وبسبیی خ <?php

include(„class.Lion.php‟);

$objLion = new Lion();

$objLion -> weight = 200; //200 kg

$objLion -> furColor = „brown‟;

$objLion -> maneLength = 36; //36 cm

$objLion -> eat();

$objLion -> roar();

$objLion -> sleep();

?>

سا ثذ Catب تذ بی والع اذ PRPبغس و دس ای خب دیذیذ، ؿب ی تایذ

ث extendsث خبعش داؿت ثبؿیذ و اط ی .وذب فشاخای ویذؿت دثبس ی ی آ

php ی یذ و ثبیذ ث عس اتبتیه تبیPRP ب تذبی والعCat ث شا تبی

ی یذ و یه phpای اط چی ث . وذ includeسا دس ثشب Lionـخلبت والع

حؼة ی ؿد ؿب او ی تایذ تبثغ Catؿی ای اص والع Lionؿی اص والع

petTheKitty() سا ثشای آ فشاخای ویذ:

www.ParsBook.org

Page 30: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 30

<?php

include(„class.Lion.php‟);

$objLion = new Lion();

$objPetter = new CatLover();

$objPetter -> petTheKitty($objLion);

?>

ایزبد ویذ ث عس اتبتیه تػظ والع Catؿب دس والع ثب ای سؽ ش تغییشی و

Lion ثبي بی سفغ ؿذ، تاثغ، تذب .ث اسث ثشد ی ؿدPRP بی اضبف ؿذ ی ث

. تب صیشوالع ب اسث داد ی ؿذ

ع دس خب ثؼذی ؿب خایذ دیذ و چ ی تا ثب اػتفبد اص یه ػبصذ، یه صیش وال

ایزبد وشد وذ صیش سا دس آ لشاس class.Cheetah.phpیه فبی رذیذ ثب ػا . سا ایزبد وشد

:دیذ<?php

require_once(„class.Cat.php‟);

class Cheetah extends Cat {

public $numberofSpots;

public function _construct() {

$this -> maxSpeed = 100;

}

}

?>

:اسد ویذ testcats.phpوذ صیش سا دس فبی <?php

require_once(„class.Cheetah.php‟);

function petTheKitty(Cat $objCat) {

if($objCat -> maxSpeed < 5) {

$objCat -> purr();

}

else {

echo „Can not pet the kitty - it is moving at ‟.

$objCat -> maxSpeed.‟ kilometers per hour!‟;

}

}

$objCheetah = new Cheetah();

petTheKitty($objCheetah);

$objCat = new Cat();

www.ParsBook.org

Page 31: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 31

petTheKitty($objCat);

?>

یه ػبصذ numberofSpotsرذیذ ثب ػا publicیه تغیش Cheetahوالع

رذیذ ثؼبصیذ، مذاس Cheetahثؼذ اص ای ش لت ؿب یه . جدذ Catداسد و دس والع

دلت . خاذ ثد 011ث اسث ثشد اػت ثشاثش ثب Catو آ سا اص والع maxSpeedپشپشتی

مذاس ای ای تؼشیف ـذ اػت، مذاس آ دس maxSpeedثشای Catویذ، چ دس والع

وؼبی و دس خب شث داؿت ثبؿذ . دس ظش شفت ی ؿد 1ثشاثش ثب ()petTheKitty تبثغ

.ی یىذ 1یذاذ و صب خاة ػشػت آب ث

ب یب حتی ػبصذ ب خشة بی رذیذ، صیشوالع ب ی تاذ ث PRPثب افضد تاثغ،

ذ یظی بی رذیذی سا ث ثشب ؿب اضبف ساحتی ثب مذاس اذوی وذ خد سا ؼتشؽ د

ش صب و ثتایذ والػی سا یه ع خبف اص والػی دیش تؼشیف ویذ، دس ای الغ اص . وذ

. ثشب یؼی سا داؿت ثبؿیذلذست حذاوخش پتبؼی ثشب ی ؿب ساحت اػتفبد ویذ تب

تازنویسی متذها

اسث ثشد اػت، ضی ذاسد و حتب اص پیبد ػبصی اذ چ یه والع اص والػی دیش

ثشای خب اش ؿب دس حب ؿت ثشب ای ثشای حبػج .خد ثشای یه تبثغ خبف اػتفبد وذ

Rectangle، احتبال والع بیی ثب ػا ی ؼبحت اؿىب ختف ذػی ثبؿیذ

Triangle چذضؼی ؼتذ اص یه والع اذ ثب ش د ای ؿى ب ػی. خایذ داؿت

. اسث ی ثشذ Polygonػا

getArea یه تذ ث ب numberOfSidesث ب PRPیه Polygonوالع

تبی چذ ضؼی ب ؼبحتی ثشای حبػج داسذ، ش چذ و سؽ حبػج . خاذ داؿت

ج ؼبحت ؼتغی ثشاثش اػت ثبفش حبػ. ؼبحت ثشای ااع ختف آب فشق ی وذ

www.ParsBook.org

Page 32: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 32

w * h وw ب ػشمh ثشای حبػج ؼبحت خج اص .ب ع ؼتغی ی ثبؿذ

ب لبػذ ی خج ی b، استفبع خج hاػتفبد یـد و دس آ h * b * 0.5فش

. ثبؿذ

ؾ فشم حبػج ی ؼبد پی تذ ی ػبصیذ، ثبیذ Polygonثشای ش صیشوالػی و اص

ثب دثبس تؼشیف وشد تذ حبػج . ؼبد ی شثط ث آ ؿى ػم ویذ تذ ؼبحت سا ثب

. ؼبحت ؿب ی تایذ پیبد ػبصی سد ظش خد سا داؿت ثبؿیذ

سا اضبف وشد height widthرذیذ ثب ب بی PRPدس سد ؼتغی، ؿب ثبیذ د

ثشای والع خج . ثبصیؼی ویذ ،پیبد ػبصی ؿذ Polygon دس والع سا و ()getAreaتذ

بیی سا ثشای رخیش اعالػبتی دس سد ػ صای، استفبع لبػذ، تؼشیف وشد PRPیض ؿب ثبیذ

ثب اػتفبد اص ساحت ثبصیؼی تذب، ؿب ی . سا ثشای آ ثبصیؼی ویذ ()getAreaذ

پیبد اص س و ی خاذ ع ع ب اربص دیذ تذ بی والع اذ سا آتایذ ث صیش وال

.ػبصی وذ

تبثؼی و یه چذضؼی سا ث ػا پبساتش شفت ؼبحت آ سا چبح ی وذ، ث عس

ای . صیش والػی سا و ث آ پبع داد ؿذ اػت، فشاخای ی وذ ()getAreaاتبتیه تذ

و ث كست اتبتیه دس صب ارشا تـخیق ی دذ و ثبیذ وذا تذ OOP بی تابیی صثب

getArea() ث چذ سیختی یب ،سا فشاخای وذPolymorphism چذسیختی، ث . ؼشف اػت

.تابیی ثشب ثشای ازب وبسبی ختف ثش اػبع ؿی ای و ثش سیؾ ػ ی وذ، ی یذ

ختف ثش اػبع ع چذضؼی و ث تبثغ داد ()getArea بیفشاخای تذدس ای خب یؼی

. ی ؿد

www.ParsBook.org

Page 33: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 33

ثؼضی الغ ؿب ی خایذ و پیبد ػبصی كست شفت تػظ والع اذ سا حفظ

ثشای خب اش ؿب ثشب .ویذ دس ػی حب چذی فؼبیت دیش ث تذ صیشوالع اضبف ویذ

Volunteerشوت غیش اتفبػی داؿت ثبؿیذ، احتبال والػی ث ب ای ثشای ذیشیت یه ؿ

ای تذ ث داعجب اربص ی دذ تب . داسد ()signupخایذ داؿت و تذی ث ب ( داعت)

. فضایذی ادس یه پشط ؿشوت وذ آ وبسثش سا ث یؼت داعجب آ وبس

داؿت ... ت ب چ صی ی ربیی یب ى اػت ؿب، وبسثشای ثب ثشخی حذدی

دس ای سد، چذ سیختی ث ؿب ای . غ ویذ و ثبیذ آب سا اص ؿشوت دس ثشخی پشط ب ثبؿیذ

ایزبد وشد دس آ اص تذ ثبصیؼی RestrictedUserاىب سا ی دذ تب والػی ثب ػا

ذا حذدیت بی وبسثشا سا ثشسػی ی وذ، ، و ای تذ اثتاػتفبد ویذ ()signupؿذ ی

اش حذدیتی ذاؿت . ػپغ ث آب اربص ی ؿشوت دس پشط سا ی دذ یب آب سا غ ی وذ

.ثبؿذ، ؿب ی تایذ تاثغ والع اذ سا ثشای تىی حجت ب آب دس پشط، فشاخای ویذ

ؿب . ، یبص ذاسیذ تب آ سا دثبس ثیؼیذصبی و ؿب والػی سا ثبصیؼی ی ویذ

ی تایذ اص ب پیبد ػبصی والع اذ اػتفبد ویذ فمظ ـخلبت سد ظش خد سا ث آ

. ثیفضاییذ

یه شثغ خد . سا ایزبد خایذ وشد Rectangle Squareدس خب صیش ؿب د والع

ؿب ثب یه ؼتغی ازب ی دیذ سا ی تایذ ثب ش وبسی و. ػی ؼتغی ث ؿبس ی آیذ

؛ اب چ ؼتغی د ضغ تفبت داسد ی شثغ تب یه ضغ داسد، یه شثغ یض ازب دیذ

.ذثبیذ وبسبی تفبتی سا ثب آب ازب دی

:ایزبد وشد وذ صیش سا دس آ لشاس دیذ class.Rectangle.phpفبی رذیذی ثب ػا

<?php

class Rectangle {

public $height;

public $width;

public function _construct($width,$height) {

$this -> width = $width;

$this -> height = $height;

www.ParsBook.org

Page 34: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 34

}

public function getArea() {

return $this->width * $this->height;

}

}

?>

ػبصذ ی والع ع . ثشای ذ ػبصی ؼتغی اػت ،ای یه سؽ خة پیبد ػبصی

. ؼبحت آ سا حبػج ی وذ ()getAreaػشم سا ث ػا پبساتش لج وشد تذ

:ثیبذاصیذ class.Square.phpاو بی ث والع

<?php

require_once(„class.Rectangle.php‟);

class Square extends Rectangle {

public function _construct($size) {

$this -> width = $size;

$this -> height = $size;

}

public function getArea() {

return pow($this->height , 2);

}

}

?>

ثشای ایى ؼتغیی، . ذ اذثبصیؼی ؿ ()getAreaدس ای وذ ػبصذ تذ

دس تیز ػبصذ ی والع تب ث یه . شثغ ثبؿذ، ثبیذ ش چبس ضؼؾ ث یه اذاص ثبؿذ

. پبساتش یبص خاذ داؿت اش ثیؾ اص یه پبساتش ث آ اسػب ؿد، بثمی سا بدیذ ی یشد

تػظ وبسثش ثیـتش اص تؼذاد اش تؼذاد پبساتش بی اسػب ؿذ ث یه تبثغ تؼشیف ؿذ

دس ثشخی اسد ای یه سفتبس . یچ خغبیی سا كبدس ی وذ phpپبساتش بی خد تبثغ ثبؿذ،

شارؼ ()func_get_argsتبثغ ؼتذاتثشای اعالػبت ثیـتش ی تایذ ث .غة ی ثبؿذ

. ویذ

www.ParsBook.org

Page 35: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 35

عس كحیح ؼبحت ی تاؼت ث Rectangleاشچ تذ پیؾ فشم رد دس والع

شثغ سا یض حبػج وذ، اب ای تذ ثشای افضایؾ ػىشد ثشب ثبصیؼی ؿذ، چشا و شفت

ضشة آب دس یىذیش كست ی PRP حبػج ی ززس آ، ػشیؼتش اص شفت د PRPیه

. یشد

(Preserving the Parnet’s Functionality)حفظ عاملیت والذ

غ ؿب ی خایذ تب اص تاثؼی و دس والع اذ پیبد ػبصی ؿذ اذ، ثب بی ال

تب ی . دس ای كست زجس یؼتیذ تب آ سا ثبصیؼی ویذ. تغییشات اذوی اػتفبد ویذ

.تایذ تغییشات سد ظشتب سا ث آ اضبف ویذ

صبی و ؿب . اػتفبد ویذ parent::[function name]ثشای فشاخای تاثغ اذ اص

ی خایذ تب چذ تغییش دس یىی اص تذ بی اذ ایزبد ویذ، ثؼذ اص فشاخای آ تبثغ ثب

parent::[function name] ی تایذ تغییشات سد ظش خد سا اػب ویذ .

. داسی Customer SweepstakesCustomerدس خب صیش د والع ثب ب بی

یه ػپشبسوت ثشب ای داسد و بی الغ ث خبعش ثشخی بػجت ب ثشب ی كذق پ

داسد و اص IDش خشیذاسی و اسد فشؿب ی ؿد ثشای خدؽ یه . فشؿب سا تغییش یذذ

دس ؿشط ثذی .دیتبثیغ ی آیذ، یه ؿبس ـتشی داسد و ث تؼذاد ـتشیب لج اؿبس داسد

. بی ای فشؿب، خشیذاس یه یی ثشذ ربیض خاذ ؿذ

:وشد وذ صیش سا دس آ اسد ویذ ایزبد class.Customer.phpوالػی ثب ػا

<?php

class Customer {

public $id;

public $customerNumber;

public $name;

www.ParsBook.org

Page 36: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 36

public function _construct($customerID) {

//Fetch customer information from database

$data = array();

$data[„customerNumber‟] = 1000000;

$data[„name‟] = „Jane Johnson‟;

//Assign the values from the database to this object

$this -> id = $customerID;

$this -> name = $data[„name‟];

$this -> customerNumber = $data[„customerNumber‟];

}

}

?>

ایزبد وشد وذ صیش سا دس class.SweepstakesCustomer.phpاو فبیی ث ب

:آ لشاس دیذ

<?php

require_once(„class.Customer.php‟);

class SweetstakesCustomer extends Customer {

public function _construct($customerID) {

parent::_construct($customerID);

if ($this->customerID == 1000000)

{

echo „Congratulations, You win a year supply of stakes!‟;

}

}

}

?>

وراثت چگونه کار می کنذ؟

ؿب . اص دیتبثیغ ی یشد customer IDای سا ثب اػتفبد اص مبدیش customerوالع

سا اص وبست بیی و دس اوخش فشؿب بی صزیش ای ثضسي ث customer IDثبیذ مذاس

ؿب ی تایذ اعالػبت ؿخلی customer IDثب اػتفبد اص . ـتشیب داد ی ؿد، ثیشیذ

www.ParsBook.org

Page 37: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 37

. ـتشیب لج اص ا سا ـب ی دذ اص دیتبثیغ ثیشیذـتشیب سا ث شا ػذدی و تؼذاد

. رخیش ویذ( public)تبی ای اعالػبت سا دس تغیش بی ػی

ؿب اثتذا ثبیذ ثب . چذ وبس دیش سا ث ػبصذ ی افضایذ SweepstakesCustomerوالع

پبساتش بیی سا و ی وشد ػبصذ ی اذ سا فشاخای ، parent::_constructاػتفبد اص

ب ی ویذ اش ای customerNumberػپغ ث ـخل ی . خاذ ث آ ثذیذ

. ـتشی، ؿبس یه یی ثبؿذ ث ا ی ییذ و ثشذ ؿذ اػت

ایزبد testCustomer.phpثشای ای و ثجییذ ای والع چ وبس ی وذ، فبیی ثب ب

:ذ صیش سا دس آ لشاس دیذوشد و

<?php

require_once(„class.SweepstakesCustomer.php‟);

//since thid file already includes class.Customer.php, there‟s

//no need to pull that file in, as well.

function greetCustomer(Customer $objCust) {

echo “Welcome back to the store $objCust->name!”;

}

//change this value to change the class used to create this customer

//object

$promotionCurrentlyRunning = true;

if($promotionCurrentlyRunning) {

$objCust = new SweepstakesCustomer(1000000);

}

else {

$objCust = new Customer(1000000);

}

greetCustomer($objCust);

?>

لشاس دیذ فبی سا دس falseسا ثشاثش ثب promotionCurrentlyRunning$دس اثتذا مذاس

ویذ، trueسا promotionCurrentlyRunning$صبی و مذاس . شسشتب ثبص ویذ

. غبی جی ثش ثشذ ثد آ ؿخق چبح ی ؿدپی

www.ParsBook.org

Page 38: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 38

واسط ها

ى اػت . دس ثشخی اص الغ، ؿب والع بیی سا داسیذ و ساثغ ی ثیـب ساحت یؼت

ثشای خب . والع بی وبال تفبتی داؿت ثبؿیذ و فمظ ثؼضی اص سفتبس بیـب ـتشن اػت

ش دی ای اؿیب ی تاذ ثبص ثؼت ؿذ، اب . یشیذیه ؿیـ ی شثب یه دس سا دس ظش ث

فشلی ی وذ و چ ع دس یب ؿیـ ای ثبؿذ، آب ای كفبت ـتشن . یچ سثغی ث ذاسذ

. سا ثب داسذ، اب ث رض ثبص ثؼت ؿذ یچ اؿتشان دیشی ثب ذاسذ

واسط ها چه کار می کننذ

ؿب سا لبدس ی ػبصد تب ( Interface)یه اػظ . یض دیذ ایذ OOPدس ؿب ای رج سا

، اب ح ی ازب آ سا ث ؿب ـب ـخق ویذ و فال ؿی ی تاذ فال وبس سا ازب دذ

ؿی ای . یه اػظ، لشاسدادی ثی اؿیبی ثی سثظ ثشای ازب وبس بی ؼ ی ثبؿذ. ی دذ

ػبصی ی وذ ث تبی اػضبی خد ای ضبت سا یذذ و ی تاذ و ای اػظ سا پیبد

دچشخ ب اص فتجب وبال اؿیبی . تبی وبسبیی و دس اػظ تؼشیف ؿذ اذ سا ازب دذ

تفبتی ؼتذ، اب اؿیبیی و بیبش آب سا دس یه غبص ی اص سصؿی ؼتذ، ثبیذ ثتاذ ثب

. آب وبس وذش دی

ثب تؼشیف یه اػظ پیبد ػبصی آ دس اؿیبیتب ی تایذ والع بی وبال تفبتی سا ث

فبیی ثب . خب صیش ب ؼب ی ؿیـ ی شثب دس سا ـب ی دذ. تاثغ ؼ اسػب ویذ

:ایزبد ویذ interface.Openable.phpػا

<?php

interface Openable {

public function open();

public function close();

}

?>

www.ParsBook.org

Page 39: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 39

ػ class.[className].phpبغس و ثشای ب زاسی والع بیتب ث كست

یؼی ث كست صیش آب سا . ی وشدیذ، ثشای اػظ ب یض ثتش اػت اص ب سؽ اػتفبد ویذ

interface.[interface Name].php: ب زاسی ویذ

سا ثب اػتفبد اص ب سؿی و والع ب سا تؼشیف ی ویذ، تؼشیف Openableؿب اػظ

یه اػظ یچ تغیش ػضی . اػتفبد وشد ایذ interfaceاص classث رض ایى ث ربی . وشدیذ

چ یچ پیبد ػبصی كست . وذذاسد یچ وذا اص تاثغ ػض خد سا پیبد ػبصی ی

ی phpای وبس ث . تؼشیف ویذ Abstractای تاثغ سا ث كست اتضاػی یب ثبیذ شفت، ؿب

اش . تاثغ ی ثبؿذ یذ و ش والػی ای اػظ سا پیبد ػبصی وذ، خدؽ ؼئ پیبد ػبصی

یه خغبی صب ارشا خاذ phpیذ، تایذ تبی تاثغ اػظ سا دس آ والع پیبد ػبصی و

ؿب ی تایذ تاثؼی سا و ی خایذ پیبد ویذ، ثى ثبیذ تبی آب سا پیبد ػبصی . داد

. ویذ

واسط ها چگونه کار می کننذ؟

لشاسدادی ثی اػضبی یه ثشب اػت و ی یذ ش والػی و ی Openableاػظ

. سا دس خدؽ پیبد ػبصی وذ ()open() closeفبد وذ، ثبیذ د تبثغ خاذ اص ای اػظ اػت

ثب ای لشاسداد ؿب ی تایذ اص تاثغ ب ثشد ثشای اؿیبی ختفی اػتفبد ویذ، ثذ ایى یچ

. استجبط ساحتی ثی آب رد داؿت ثبؿذ

:یذاسضث class.Door.phpفبی صیش سا ایزبد وشد ب آشا

<?php

require_once(„interface.Openable.php‟);

class Door implements Openable {

private $_locked = false;

public function open() {

if($this->_locked) {

echo „Can not open the door. It is locked.‟;

www.ParsBook.org

Page 40: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 40

}

else {

echo „creak ...<br>‟;

}

}

public function close() {

echo „Slam!<br>‟;

}

public function lockDoor() {

$this->_locked = true;

}

public function unlockDoor() {

$this->_locked = false;

}

}

?>

:ایزبد ویذ class.Jar.phpاو فبیی ثب ػا

<?php

require_once(„interface.Openable.php‟);

class Jar implements Openable {

private $contents;

public function _construct($contents) {

$this->contents = $contents;

}

public function open() {

echo „The jar is now open! <br>‟;

}

public function close() {

echo „The jar is now closeed! <br>‟;

}

}

?>

دس ب پؿ testOpenable.phpثشای اػتفبد اص ای فبی ب، فبی دیشی ثب ػا

:ایزبد ویذ

<?php

require_once(„class.Door.php‟);

require_once(„class.Jar.php‟);

www.ParsBook.org

Page 41: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 41

function openSomething(Openable $obj) {

$obj->open();

}

$objDoor = new Door();

$objJar = new Jar(“Jam”);

openSomething($objDoor);

openSomething($objJar);

?>

ی سا پیبد ػبصی وشد اذ، ؿب Openableاػظ Door Jarچ ش د والع

چ ای تبثغ فمظ اؿیبیی سا . اسػب ویذ ()openSomethingتایذ ش دی آب سا ث تبثغ

سا پیبد ػبصی وشد اذ ی پزیشد، دس تیز ؿب ی تایذ تاثغ Openableو اػظ

open() close() اب ؿب ی تایذ دس داخ والع . سا دس آ فشاخای ویذ

openSomething() ثPRP والعJar و بcontents ی ثبؿذ یب ث تذ بی

ب PRPی ثبؿذ، دػتشػی داؿت ثبؿیذ؛ چشاو ای ()lock() unlockو Doorوالع

. تذ ب رضئی اص اػظ یؼتذ

کپسول سازی

سا اص دیذ ب عس و لجال فت ؿذ، اؿیب ؿب سا لبدس ی ػبصذ تب رضئیبت پیبد ػبصیـب

و لجال Volunteerاص والع ()signupؿب ثشای فشاخای تذ .وبسثشا خفی داسیذ

فت ؿذ یبصی ذاسیذ ثذایذ و ای والع داد بیؾ سا دس دیتبثیغ رخیش ی وذ یب دس یه

یذ و آیب ث عس ـبث الص یؼت ثذا. یب ش چیض دیشی XMLؼی یب دس فبی textفبی

ؼتذ ث كست تغیش بی volunteerاعالػبت داعجب و ث ػا اؿیبیی اص والع

. ث كست اؿیبی دیش حتی رذاب تؼشیف ؿذ اذ، یب ث كست آسای یب

www.ParsBook.org

Page 42: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 42

یب وپؼ ػبصی ؼشف encapsulationای تابیی خفی وشد رضئیبت پیبد ػبصی ث

:یش وپؼ ػبصی ؿب د ف صیش ی ثبؿذث ػجبست د. اػت

حبفظت داد بی داخی والع اص وذ بی خبسری -

رضئیبت پیبد ػبصی وشدخفی -

یه . لشاس داد دس وپؼ یب یه پؿؾ خبسری ی ثبؿذ encapsulationؼبی غی

اػغی سا تؼشیف والع خة پػت ی خبسری وبی سا ث دس حتیبت داخیؾ ی وـذ

ث كست وبال رذا اص حتیبت خد والع، ی وذ تب ثب اػتفبد اص آ وذ بی خبسد والع

:ثب ای وبس ؿب د ضیت صیش سا ث دػت ی آسیذ. ؿت ؿذ

ش صب و خاػتیذ ثذ تغییش داد ،ؿب ی تایذ رضئیبت پیبد ػبصی والػتب سا -

. اػتفبد ی وذ تغییش دیذوذبیی و اص والػتب

ب سا stateب PRPچ ؿب ی دایذ یچ چیضی اص خبسد والع ی تاذ مبدیش -

. تغییش دذ، ؿب ی تایذ ث آ مبدیش یـ اػتبد ویذ

ث visibility. داسذ visibilityتغیش بی ػض تذبی ش والع یه اىب دیذ یب

بغس و لجال فت ؿذ، اػضب .و ی تاذ اص ثیش والع دیذ ؿد، اؿبس ی وذآچ

protectedاػضب تذبی . تب ثشای خد والع لبث اػتفبد ؼتذ privateتذ بی

دس بیت اص اػضب تذبی . ثشای خد والع صیش والع بی آ لبث دػتشػی ؼتذ

public ی تا اػتفبد وشد دس رب .

ش دػتشػی ویذ privateث عس وی ثتش اػت تبی تذب اػضبی والع سا

. كست یشد( accessor methods)ث ای اػضب تذب ثبیذ اص عشیك تذبی دػتشػی یب

ا ث ؿب ثخساذ، ؿب ث وؼی اربص ی دیذ ، صبی و چـبتب ثؼت اػت ث صس غزایی س

ثى ؿب ی خایذ تب آ سا ثشسػی وشد ػپغ تلی ثیشیذ و آیب ی خایذ آ سا

ث عس ـبث صبی و اص وپؼ ػبصی اػتفبد ی ؿد، ؿب ی تایذ تغییشاتی ثخسیذ یب ؟

www.ParsBook.org

Page 43: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 43

آب سا پزیشفت ثش سی ؿی ؿب كست ی یشد سا ثشسػی وشد publicسا و تػظ یه تبثغ

.یب سد ویذ

ثشای خب اش ؿب دس حب ؿت ثشب ای ثشای یه ثبه ثبؿیذ و ثب رضئیبت حؼبة

totalBalanceای ث ب PRPثب Accountوبسثشا وبس یىذ ثبؿیذ، احتبال ؿی ای ث ب

Balanceل ی ـخ. خایذ داؿت ()makeDeposit() makeWithdrawal تذبی

( balance)تب سای و ی تا ردی . یب فمظ خاذی ثبؿذ read-onlyثبیذ ث كست

ش ا. ی ثبؿذ( deposit)یب اسیض ( withdrawal)ثشداؿت سا تغییش داد اص عشیك

totalBalance ث كستpublic ثبؿذ، ؿب ی تایذ وذی ثیؼیذ و ثذ ازب تشاوؾ

. ردی حؼبة افضایؾ یبثذ، و ای اكال ثشای یه ثبه خة یؼتاسیض

تؼشیف وشد تذی ثب ػا privateسا ث كست PRPدس ػم ؿب ثبیذ ای

getTotalBalance() سا ایزبد ویذ و مذاس ای ػضprivate چ تغیشی و . سا ثششداذ

اػت، ؿب ی تایذ آشا ث عس privateث كست سا ی داسد totalBalanceمذاس

()makeWithdrawal() makeDepositؼتمی تغییش دیذ اص آزبیی و تب د تذ

ی تاذ ثش ردی تبحیش ثزاسذ، ؿب زجسیذ ثشای افضایؾ ردی حؼبثتب الذا ث اسیض

.پ ویذ

بت پیبد ػبصی حفبظت اص تغیش بی ػض، یه تػؼ ش ثب تابیی خفی وشد رضئی

.ثیؼیذ( stable)افضاسی ؿی شا ث ؿب اىب ی دذ تب ثشب ای ؼغف پبیذاس

PHPتغییرات شی گرایی در

دس اثتذا ذف اكال . لشاس داد ؿذ phpث ثؼذ اىب پـتیجبی اص اؿیب دس php 3ص ا

د پـتیجبی ی اشصی والع ب اؿیب جد، ثى ث كست ثؼیبس حذپـتیجبی اص ف

یه سؽ بػت ػبد ثشای ش ثذی داد ب خبعشپـتیجبی اص اؿیب ث دس اثتذا ذف.ؿذذ

www.ParsBook.org

Page 44: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 44

ف ؿی شایی یض دس آ تػؼ یبفت اػتفبد اص آ phpثب یش ؿذ . ثدتاثغ ثد

. ثضسي ثؼیبس ؼ ؿذ دس ثشب بی

ؿب ی تاؼتیذ تغیشب یب . دس الغ یچ پـتیجبی اص وپؼ ػبصی رد ذاؿت

. ثد public چیض ث كست . تؼشیف ویذ protectedیب privateتذبیتب سا ث كست

. بغسو دیذیذ ای اش ثبػج ایزبد ـىالتی ی ؿد

تذب تغیشب ی . یچ پـتیجبی اص تذب اػظ بی اتضاػی رد ذاؿتػال ثش آ

ػذ رد ای اسد ثبػج . یچ خشثی تؼشیف ـذ ثد. تؼشیف ؿذ staticتاؼتذ ث كست

رذ صیش . ـى ؿد phpث Javaیب ++Cی ؿذ تب تشر ثشب ب اص صثب بی دیش خ

:سا ـب ی دذ php 5 php 6بی رذیذ ثشخی اص یظی

مسیت ویژگی جذیذ

متغیرها و متذهای

private وprotected .اىب پزیش اػت phpوپؼ ػبصی حفبظت اص داد ب او دس

پشتیثانی از ارجاع های

چنذ مرحله ای

php او دس ()obj->getSth()->doSth$اػتفبد اص رالتی خ

.پزیش اػتاىب

متغیرها و متذهای

static

اضبف phpتؼشیف تذبیی و ی تاذ ث كست اػتبتیه فشاخای ؿذ، دس

.ؿذ اػت

.تؼشیف ی ؿذ ()construct_ او تبی ػبصذ ب ث كست سازنذه های یکپارچه

پشتیثانی از مخرب هااص اىب تخشیت ثشخسداس ؿذ php ، والػبی ()destruct_ثب اػتفبد اص تذ

ای یظی ای اىب سا ی دذ تب ث ب تخشیت یه ؿی وبسبیی سا و . اذ

.ی خایذ ازب دیذ

پشتیثانی از کالس ها و

واسط های انتساعی

تذ بی سا دس والع اذ تؼشیف وشد آب سا دس صیشوالع ب ؿب ی تایذ

.پیبد ػبصی ویذ

نوع پارامترهاؿب ی تایذ یه والع سا ث ػا پبساتش ثشای تاثؼی و ؿی ی یشذ ، پبع

و ث ؿب ای اعیب سا {...} function foo (Bar $objBar)خ . دیذ

.ی دذ و پبساتش اص ب ػی اػت و ؿب ی خاػتیذ

www.ParsBook.org

Page 45: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 45

خالصه

( Object Oriented Programming)ب یؼی ؿی شا دس ای مب ؿب ثب ف ثش

اؿیب زػ ای اص داد . ب والع سا ث كست یه مـ ثشای ایزبد اؿیب ـب دادی. آؿب ؿذیذ

ش وذا اص اؿیب ـخلبتی داسذ . ب تاثؼی ؼتذ و ثش اػبع تؼشیف والع ػبخت ی ؿذ

methodچی آب سفتبسبیی یض داسذ و تذ یب . بیذ ی ؿد propertyیب PRPو

. ب سا تغیش تذب سا تبثغ فشم ویذPRPی تایذ . بیذ ی ؿذ

خد ػی ( فشصذ)ثشای خب شثغ ب . ػ ی ثشذ اذ ثشخی اص والع ب اص یه والع

صیش والع اص والػی دیش تؼشیف صبی و ؿب والػی سا ث ػا یه . ؼتذ( اذ)ؼتغی

ؿب ی تایذ تذبی والع اذ سا . بی آ سا ث اسث ی ثشد PRPی ویذ، تبی تذب

ثبصیؼی ویذ یب اص ب پیبد ػبصی اذ اػتفبد ویذ فمظ چذ یظی دیش ث آ اضبف

.اص تذ اذ اػتفبد ویذ دلیمب یب ایى اكال تذ سا ثبصیؼی ىیذ. ویذ

وپؼ ػبصی ث تابیی یه والع ثشای . ی ثبؿذ OOPوپؼ ػبصی ف ی دس

بی ش والع ػ ػغح PRPتذب . حفبظت اص حتیبتؾ دس مبث دیشا فت ی ؿد

visibility داسذ:

- public

- private

- protected

ثشای خد protectedاػضبی . ع لبث دػتشػی ؼتذتب ثشای خد وال privateاػضبی

ثشای دس دػتشع ی publicوالع صیشوالع بی آ لبث دػتشػی ؼتذ اػضبی

. ثبؿذ

www.ParsBook.org

Page 46: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 46

تغییشات صیبدی پیذا php، پـتیجبی اص ؿی شایی دس php 5 Zend Engine 2ثب ؼشفی

ثؼذ اص آ دس كست شفت php 5ی و دس یظی بی رذیذ ثجد بی لبث تر. وشد

php 6 تػؼ یبفت اػت ،php سا ث یه صثب ؿی شای وب تجذی وشد اػت .

www.ParsBook.org

Page 47: Introduction to Object Oriented Programmingdownloads.nimaarab.com/Nima_Content_Management_System... · 2017-03-29 · masoudmanson | PHP & OOP 1 Introduction to Object Oriented Programming

masoudmanson | PHP & OOP 47

About the Authors

Ed Lecky-Thompson was a founding partner of Brandspace before starting his own interactive

agency in 2003. Currently, he heads up U.K. digital specialists Galileo (www.galileodm.com),

where he runs thriving digital relationship marketing and online public relations accounts for

top blue chips (including Microsoft and a major U.S. financial services group). He has written

several books on PHP over the past five years, as well as writing for php|architect magazine. Ed

was nominated for a New Media Age Effectiveness Award in 2004 for his work with First Leisure

Corporation as head of new media.

Steven D. Nowicki is a senior software developer at AdKnowledge, Inc., and has more than 13

years of experience with software development and technology management in New York,

London, and Los Angeles. He has been the lead software architect for several multimillion-

dollar Web applications and dozens of large-scale, mission-critical PHP implementations,

including enterprise resource planning, CRM systems, and high-volume analytics. This is his

third book on PHP.

Thomas Myer is a technical book author, consultant, and Web developer. In 2001, he founded

Triple Dog Dare Media in Austin, Texas. Triple Dog Dare Media focuses its attention on helping

companies create CodeIgniter-based applications such as content management, portals, and

eCommerce systems. He is the author of No Nonsense XML Web Development with PHP

(Sitepoint, 0114) and Lead Generation on the Web (O’Reilly, 0117). His newest book is

Professional CodeIgniter (Wrox, 2008). He has also authored dozens of technical and business

articles for IBM DeveloperWorks, Amazon Web Services, AOL, Darwin Magazine, and others.

About the interpreter

Since 0119 I’m studing Information Technology in Institute for Advanced Studies in Basic

Sciences (IASBS).

E-mail : [email protected]

Cellular phone : 09148401824

Blog : iasbs-it.mihanblog.com

Masoud Amjadi

www.ParsBook.org