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 има няколко интересни интерфейса и един от тях е ArrayAccess. Този интерфейс съществено изменя поведението на обектите в езика. На практика, ArrayAccess позволява обръщение към обекта по подобие на масив ползувайки познатото

$array[] = 'newItem'.

Разбира се, за пълноценна емулация на това поведение е нужна имплементация на споменатия интерфейс. За него научаваме от извора.
Интерфейс ArrayAccess в PHP
interface ArrayAccess {

 /* Методи */
 abstract public offsetExists ( $offset )
 abstract public offsetGet ( $offset )
 abstract public offsetSet ( $offset , $value )
 abstract public offsetUnset ( $offset )

}

Интерфейсът съдържа 4 абстрактни метода:
  • abstract public boolean offsetExists(mixed $offset) — съществува ли значение по зададения ключ;
  • abstract public mixed offsetGet(mixed $offset) — получаване на значение по индекс;
  • abstract public void offsetSet(mixed $offset, mixed $value) — установява значение с посочен индекс;
  • abstract public void offsetUnset(mixed $offset) — премахва значението.

Как да се възползваме от интерфейса?


Нека създадем клас Book, опишем нужните ни свойства и презаредим методите на интерфейса. Забележете видимостта на свойствата.

клас book.class.php
<?php

class Book implements ArrayAccess{
 
 public $title;
 private $author;
 protected $isbn;

 function offsetExists($item){
  return isset($this->$item);
 }

 function offsetUnset($item){
  unset($this->$item);
 }

 function offsetSet($item, $value){
  $this->$item = $value;
 }

 function offsetGet($item){
  return $this->$item;
 }

}

И създадем основен файл, в когото ще добавим book.class.php, ще създадем обект и ще го обходим.

index.php
<?php

// включване на класа
include 'book.class.php';

// създаване на инстанция
$book = new Book();

// добавяне на значение
$book['title'] = 'PHP4';

 // проверка и прочит на значение
if(isset($book['title'])){

 echo $book['title'];

 // заличаване
 unset($book['title']);

 // добавяне на нови
 $book['title'] = 'PHP5';
 $book['author'] = 'John Smith';
 $book['isbn'] = '123456';
}

echo '<pre>'. print_r($book, true).'</pre>';

echo $book['isbn'];

Резултат на нашата работа в браузъра ще бъде изведено това:

PHP4

Book Object
(
    [title] => PHP5
    [author:Book:private] => John Smith
    [isbn:protected] => 123456
)

123456

За програмист на процедурен код това е повече от типично. Няма ги стрелките, двойните точки, присъщи за синтаксиса на ООП-програмирането. Съществена част е достъпа до закрити свойства и че всеки метод автоматично се задейства според нужната операция: съществуване, присвояване, премахване.

П.П.
Очаквайте продължение ...






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


|

0 Response to "Интерфейс ArrayAccess в PHP"

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

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

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