Punta de Choros

27 декември 2009

На 2009г й оставаха 120ч съществуване. От календара падна поредния лист с дата 27 декември и към 10.30ч сутринта ме събуди звън от телефона.

Инсталация на Microsoft шрифтове в Ubuntu 16.04

14 януари 2017

нсталация на Microsoft шрифтове в Ubuntu се поражда от идеята браузърите в различните системи, да показват еднакво текстовото съдържанието на интернет страниците.

Ubuntu 16.04 инсталация на USB disk on Key

19 ноември 2016

Арсеналът ми от мобилни компютри съдържа Fujitsu Lifebook AH530. Това е бюджетна машина от 2011г на Intel Core i5-480M процесор и 4GB DDR3 RAM памет.

gparted

Paragon ExtFS for Windows

30 юли 2016

ExtFS for Windows е утилита на Paragon Software разработена през 2013г. Тя представлява решение, предоставящо пълен достъп на четене и на запис до раздели ...

msvcr100.dll is missing Windows 10

04 октомври 2016

Майк Патерсън от Plixer, компания по компютърната сигурност, публикува доклад , че Windows 10 изпраща данни в криптиран вид от вашата машина на всеки пет минути. Той е направил максимума, за да спре изтичането, но системата продължавала да изпраща информация.


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

Функция __autoload() в PHP е част от семейството на тези специални методи, наричани още магически. Тази функция не се явява метод на класа. Тя автоматически включва клас в кода, при опит за създаване на обект и това е нейната същност.

С поредица от примери нека видим как се ползва тази функция. За целта създаваме прост файл. Той ще връща "Hello world" при обръщение към него.

test.class.php

php class

Реализация обаче налага името на класа да бъде същото с името на php-файла. Това е важно - class test = test.class.php.

Създаваме обект new test, когото присвояваме на инстанция $obj.

php object

Зареждаме метод showMessage() и смотрим в браузъра какво става.

chrome

Получаваме това, което очаквахме.

Хората с очи на сокол сигурно са забелязали пътя в адресното поле на браузъра. За прегледност и качество на работата всички класове ще държим в каталог classes.

Нека създадем втори клас. Този път по-напудрен и да го наречем employee.class.php.

employee.class.php

employee.class.php

Този клас ще умничи пълното име на юзера и ако е извън зададена възрастова граница ще му съобщава лаконично "Сори батка! Утре пак!". Пробно ще тестваме известния кино-актьор от турските сапунки, партизанина от Москва - Ерхан Соломонович Солак.

new employee

Пак смотрим в браузъра. Работи!

new employee result

Всичко е ток и жици. Ерхан Солак минава теста, даже е подмладен. Браво на PHP!

Нека допуснем, че нашия проект става все по-умен, все по-сложен. Това на свой ред налага създаване на пореден клас, на пореден обект и така по стълбата на замисъла. На практика класа се оформя в отделен файл, който се добавя в нужното място с конструкции include()/require() или техните производни -once().

В един момент се пръква код, който се нуждае от включване на камара от класове. Цяла планина се изписва в началото на кода от include-и, а това създава дискомфорт, особено ако в бъдеще се измени пътя към класовете поради някаква причина.

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

autoload.php

autoload result

Какво правим? Смотрим! И ето на, красота!

chrome result

Внимателен анализ на тялото на функцията дава отговор, защо класовете е желателно да се държат в една директория и името на класа да съответствува на името на файла. Името на заредения клас се интерполира в конкатенирания път до него. Името на параметъра може да бъде произволно.

Ако се придържаме към кодекса за обявяване имена на класове с главна буква, тогава функция strtolower($classname) на помощ. Тази функция превежда всички символи в долен регистър.

до нови срещи   ^.^
18.09.2012 profruit 

0 Response to "Функция __autoload() в PHP"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: Ubuntu, WEB, Photoshop, Фотография, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога