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 програмисти на обектно-ориентирани приложения се придържат към съглашение всеки клас да бъде отведен под собствен именуван файл. Най-досадното обаче се явява с нарастване броя на класовете, респективно отделни файлове, необходимост от описване в началото на скрипта техните имена за последвало включване/зареждане.

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

С развитието на PHP __autoload() получи по-гъвкава алтернатива за автоматическо зареждане на класове. Това развитие на нещата предполага  __autoload() да не се използва повече, защото може да бъде прекратена поддръжката й или премахната въобще. Неин приемник е spl_autoload.

spl_autoload

spl_autoload — Реализация по подразбиране на метода  __autoload().

В пространството се върти класически пример как се зареждат файлове на класове в обход на  __autoload(), чрез spl_autoload. За целта в каталог на моя локален сървър създадох два файла. Главният по име auto.php, а вторият, описващ класа по име someobject.php.


/var/www/oop/


Файл someobject.php описва клас SomeObject. При създаване на екземпляр на класа, неговият конструктор банално ще извежда името на класа с добавен израз зареден.

Забележете, че името на класа трябва да съвпада с името на файла. В противен случай ще падат фатални грешки.
<?php
class SomeObject{
 function __construct(){
  echo __CLASS__ . " loaded";
 }
}
?>

Главен файл auto.php ще съдържа класическия пример за зареждане на файлове. Забележете параметъра предаван в първата функция. Точката преди PHP, тя е съществена в случая. Втората функция се явява реализация на метода  __autoload().

<?php
 spl_autoload_extensions('.php');
 spl_autoload_register();

 $obj = new SomeObject;
?>

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


Firefox - auto.php






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

|

0 Response to "Функция spl_autoload в PHP"

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

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

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