Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Ако сте преминали през цялото три предишния урок, а след това вече сте запознати с основните понятия на ООП в PHP: класове, обекти, методи, полета и наследство. В този, последния урок ще се опитам да завърша темата на обектно-ориентираното програмиране в PHP, както и да ви запозная с някои PHP изключително полезни свойства, свързани с ООП:

  • Как да се зареди автоматично класове;
  • Как да конвертирате обекти в низ и струнен в обекти за съхранение и лесно прехвърляне;
  • Как да получите подробна информация за определен клас или обект.

Автоматично зареждане клас

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Като правило, е полезно да се запази всеки PHP клас в отделен файл. Така например, в приложение на уеб форум, щяхте да държи държавите Member.php клас файл и клас на тема - в Topic.php файл. Най-вероятно, ще се съхранява всички файлове в класовете папка някъде на сайта:

След това, ако е необходимо да се създаде клас обект, например, държава, PHP ще трябва да се свържете на първия файл с този клас:

класове за съхранение по такъв начин - нещо добро, а не само за вашата психика, но и за използването на такива удобни функции като автоматично зареждане (самозарядни).

Автоматично зареждане работи. Някъде в началото на прилагането на PHP да създадете специална функция __autoload (). По-късно, ако някъде в кода ще се опита да се създаде обект от класа, от които нищо не се знае, PHP автоматично ще наричаме тази функция, тя преминава като параметър желаното име на клас. Всички функцията за работа е да намерите желания файл и да го заредите на скрипта, като по този начин да се зареди самия клас. След това PHP ще трябва да се създаде обект от този клас.

Нека дам един пример. Напишете функция __autoload (), за да се зареди автоматично класове от папката класове:

Ето как тя работи. Първо, създаване __autoload () функция с входен параметър $ име на класа на. В началото на функцията премахва всички на подниза ".." от получения параметър, това се прави за целите на сигурността. След това, с помощта на require_once (), тя зарежда желания файл. Функция знае, че тя е в папката класове, и неговото продължение - .php. Функцията също показва съобщение на страницата, така че ние веднага виждаме, че тя работи.

Протестиращите тогава нашата функция чрез създаване на обект от клас държава. Тъй като ние не се заредят предварително класа с файла, PHP ще стартира функция __autoload (), да се разпространява на името на класа - "държава". Тя, от своя страна, ще търси класове / Member.php файл. след това PHP създава същия обект държави. В крайна сметка, се появява съобщение, че обектът е създаден.

За да тествате работата на този скрипт, да създадете папка класове в същата директория, в сценария. Нека създадем го Member.php файл с обикновен клас:

Сега, когато сме го изпълняват, за да заредите класове / Member.php файл ще създаде обект от клас държава, и на екрана ще се появи следното:

Автоматично изтегляне ще ви помогне да спестите много време, особено ако имате голям брой класове. Вместо да се обадите на функция require_once () в началото на всеки файл, който току-що създадената в началото на всички приложения функция __autoload (), както и да дават уроци за управление на заредени в PHP ръце!

обект сериализация

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Следваща обектно-ориентиран функция, която аз ще ви кажа - това е превръщането на един обект в низ, както и обратното, в низ обект. Това може да бъде полезно, когато трябва да премине обекти между скриптовете, а дори и приложения. Това са конкретни случаи:

За да се превърне обекта в низ, и обратно, със следните характеристики:

  • сериализирате () - се обект и връща низ представяне на клас и неговите свойства;
  • unserialize () - Взема низ създаден с помощта на Сериализирането (), и се връща на обекта.

Нека да разгледаме тези две функции в:

Ние създадохме един прост клас държавите с публично поле $ потребителското име, сферата на частния $ loggedIn и три метода публично: вход (), изход () и isLoggedIn (). На следващо място, скриптът създава клас обект държави, като му дава името "Фред" и да се логнете.

Тогава извикате функцията Сериализирането (), минавайки го обект на клас държава. Сериализирането () връща низ представителство на обекта, които се съхраняват в променливата $ memberString и дисплея на страница:

След това се превърне обратно в нашия низ клас обект държава, причинявайки unserialize функция () и съхранение на получени обект на променливата $ member2. За да се уверите, че нашето съоръжение за преобразуване на пълно и точно да показваме стойността на полето $ потребителско име и викате методите му isLoggedIn (), за да се провери дали потребителят е влязъл. Ето какво ще се появи на страницата:

Както можете да видите, низ създаден от Сериализирането () функция съдържа името на класа, както и имената на всички свои области и техните стойности за даден обект. (Преди полета лично име на клас е написано без интервали.) Въпреки това, имената на методите на класа не са написани на линията.

За да включите на функцията unserialize () от класа на обекта, който трябва да бъде преобразувана от низ, който трябва да се зареди преди как unserialize () повикване. Можете да напишете свой собствен клас в един и същ скрипт, който се нарича unserialize PHP е (), или да се зареди файл с даден клас през (функция за require_once). Можете също да създадете функция __autoload (), който обсъждахме по-рано. PHP ще предизвика __autoload (), ако не може да намери обекта клас, която се опитвате да конвертирате.

Забележка: Сериализирането () и unserialize () да работи и с други видове данни като масиви. Въпреки това, те не работят с ресурса.

__sleep () и __wakeup ()

Понякога, преди сериализация на обекта, има нужда от нещо, което да се почистват. Например, може да се наложи да записвате обект в базата данни и да затворите връзката. По същия начин, след deserialization, може да искате да се възстанови връзката и да извършват друга дейност.

PHP има няколко специални техники, които ще ви помогнат за това:

  • __sleep () се нарича строго преди обектът е сериализирани използване сериализирате (функция).
  • __wakeup () се нарича веднага след обекта се deserialized чрез unserialize ().

Вашата функция __sleep () ще трябва да се върне списък с полета на класа. Това е областта, които издавам () функция е включена в върнатия низ. Можете да използвате това, за да се премахнат ненужните полета от низ представителство на обекта.

Нека добавим към нашия предишен пример методи __sleep () и __wakeup ():

Ето какво ще се появи на страницата:

Моля, имайте предвид, че:

  • Нашите методи всъщност не почиства всичко __sleep () и __wakeup (), и не питат; вместо това, те просто извежда съобщението "Почистване на обекта." и "Създаване на обекта.".
  • Тъй като ние включва само $ потребителско име поле на масива, който се връща __sleep (), в резултат на низа няма да присъства кутия $ loggedIn.
  • В резултат на това deserialized обект поле $ loggedIn подразбиране ще - фалшиви, така isLoggedIn на метод повикване () на обекта deserialized, той се връща лъжа. Ето защо сценария показва съобщение "Фред е влязъл навън".

Ако искате да напишете __sleep метод (), както и всички полета са серийни номера, а след това ще трябва да се изброят всички полета на масив, който се връща метод __sleep (). Това се постига лесно с помощта на PHP array_keys () и (get_object_vars), както следва:

Забележка: друг метод клас обект сериализация (където напречното платформата) - е JSON превръщане линии.

Получаване на информация за класове и обекти

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

PHP има много полезни функции, за да получи информация за класове и обекти. Това е полезно, когато искате да работите с обекти от други приложения, а също така ще ви помогне да напишете лесен за употреба, гъвкави код. С помощта на тези функции за един обект, можете да получите своята името на класа, проверете дали тя е създадена от определен клас, получи своите полета и методи, и др.

Ето кратък списък на най-често използваните от тях:

Тя връща асоциативен масив от всички области на обект $ OBJ, заедно с текущите им стойности

Важно е, че функции като get_class_methods (), get_class_vars () и get_object_vars (), се връщат само тези методи и области, които са в същия обхват с кода на повикващия. Например, частен метод ще бъде включена в get_class_methods на връщане стойност () функция, само ако get_class_methods () метод се извиква рамките на един клас.

Нека да експериментирате с някои от тези функции в тази извадка:

Сценарият създава клас с няколко полета и методи държави. Той също така създава клас администратор - дете от класа държава. Класът на поле Администратор обществен $ adminLevel на, както и няколко методи се добавя: createForum () и banMember (), която ще има само администратор клас обекти.

След създаването на един клас, ние създаваме обект от клас администратор, да я съхранява в променливата $ администратор, което му името "Мария" и паролата на администратора, използвайки данните за вход в метод повикване ().

В последната част от сценария (линии 44-54), ние използваме различни функции на нашите съоръжения и класове. Тук е резултат от този код:

Ето как да работят тези функции:

  1. get_class ($ администратор) връща низ "Администратор".
  2. get_parent_class ($ администратор) връща низ "държава".
  3. is_a ($ администратор, "държава") връща истина.
  4. get_class_methods ($ администратор) връща масив от имена метод за класове и администратор държава. Тъй като всички тези методи - публични, те ще бъдат записани в масива.
  5. get_class_vars ($ администратор) връща масив от имена на полета и съответните им стойности по подразбиране за обществена администратор и държавите класовете.
  6. get_object_vars ($ администратор) връща масив с имената на публични полета и съответните им стойности на тока.
  7. В края на метода на повикване клас държавите - listMyProperties (). Този метод изисква get_object_vars () функция и показва резултата. Въпреки това, тъй get_object_vars () сега се нарича в рамките на класа, тя също се връща на частния областта - $ loggedIn.

Както можете да видите, PHP е много лесно да се извлече информация за даден обект или клас. В PHP има функция за получаване на информация за класа на обекта и интерфейси, например, class_exists (), get_called_class (), get_declared_classes (), get_declared_interfaces (), interface_exists (), is_subclass_of (), method_exists () и property_exists ().

В този урок научихте за полезните свойства на трите PHP обекти:

  1. Използването __autoload (), за да изтеглите автоматично файлове на редовните лекции;
  2. Как да конвертирате обекти в един ред и обратно с помощта на PHP Сериализирането () и unserialize ();
  3. Получаване на информация за обекти, класове, предци, използващи PHP функции.

С тези три качества за работа с класове и обекти в PHP няма да бъде огромна работа.

Надявам се, че ви хареса тази поредица от уроци, посветени на ООП в PHP! Ако сте приключили с всички четири урока, че имате достатъчно знания, за да напиши клас PHP сайтове и приложения. Въпреки това, историята не свършва дотук - в PHP има много полезни функции, предназначени за работа с ООП, като например:

Ако имам време, и ако имате такава нужда, аз ще ви разкажа за тях в следващите уроци.

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

До получаване на информация от два канала (зрение и слух) на ефективността на обучението далеч по-добър живот от книги. А домашните задачи и онлайн тестове ще ви позволи да мисля постоянно в целевия език и веднага провери знанията си!

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Ако искате по-дълго време, за да проучи как да се HTML, че ме има, за което трябва добра новина!

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Ако вече сте се научили HTML и искат да се движи напред, следващата стъпка ще бъде да се проучи CSS технологията.

Обектно-ориентирано PHP автоматично зареждане на класове, сериализация и информация

Ако искате да се разбере концепцията на домейн и хостинг, да научат как да се създаде база данни, да качвате файлове към уеб сайт чрез FTP сървър, създаване на поддомейни, да конфигурирате пощенските кутии за сайта и мониторинг на посещаемостта, този курс е разработен специално за вас!