KNOW INTUIT, Лекция, Обекти и класове в PHP

Наследство

Механизмът за наследяване е много важна част от целия обектно-ориентиран подход. Нека се опитаме да обясним същността му с пример. Да кажем, че създаваме описание на човек. Очевидно можем да направим това по различни начини, в зависимост от това за какво е предназначено това описание. Можете да опишете един човек като програмист: той знае такива и такива езици за програмиране, операционни системи, участвал е в толкова много проекти. Но ако човек е програмист, той не престава да бъде човек като цяло, т.е. има собствено име, фамилия, местоживеене и др. Ако преведем нашите разсъждения в термините на обектно-ориентираното програмиране, тогава можем да кажем, че сме описали два класа - клас хора и клас програмисти, всеки със свои собствени свойства и методи. Освен това класът на програмистите, очевидно, притежава всички свойства на класа хора и в същото време има свои специфични характеристики, т.е. класът програмист е подклас на човешкия клас. Така че, ако човек изобщо има име, то програмистът също трябва да има такова, но не и обратното. Освен програмисти има още много паралелки според професионалната принадлежност на хората. И всички те ще бъдат подкласове на човешкия клас. На практика често е удобно да се дефинира общ клас, който може да се използва в няколко проекта наведнъж (например клас хора или хора) и да се адаптира към специфичните нужди на всеки проект (например като клас програмисти). Как може да се приложи това? Използване на удължителния механизъм. Всеки клас може да бъде разширение на друг клас. Разширяващ (или производен) клас, в допълнение към онези свойства и методи, които са описани в неговата дефиниция, има всички функции и свойства на основния (базов клас). В нашия пример класът на програмистите се разширява и класът на всичкихора – осн. Никакви съществуващи свойства и функции не могат да бъдат премахнати от класа, класът може само да бъде разширен. Разширяващият клас в PHP4 винаги зависи само от един базов клас, тъй като множественото наследяване не се поддържа в PHP. Класовете се разширяват в PHP с помощта на ключовата дума extends.

Класът Programmer има същите променливи и функции като класа Person, плюс променливата $langs, която съдържа списъка с езици, които програмистът е научил, и функцията set_lang за добавяне на друг език към списъка. Можете да създадете представител на класа програмист по обичайния начин, като използвате новата конструкция. След това можете да зададете и получите списък с езици, които програмистът знае, и в същото време можете да използвате функциите, дефинирани за класа Person, т.е. задайте и вземете името и фамилията на програмиста и изведете информация за него в браузъра:

Взаимоотношенията, които създадохме от класовете Person и Programmer, се наричат ​​също връзки родител-дете. Класът Person е родителският клас и неговите деца, като например класа Programmer, се създават от него с помощта на разширения. Всеки клас може да стане родителски клас и съответно да породи потомци.

Редът, в който са дефинирани класовете, има значение. Не можете първо да дефинирате класа Programmer, който разширява класа Person, и едва след това самия клас Person. Класът трябва да бъде дефиниран, преди да може да бъде използван (разширен).