Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...


Обектно-ориентираният модел на 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"

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

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

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