Es ist ein Model und es sieht gut aus – ArrayAccess

| 2 Kommentare

Mein heutiger Artikel wird wohl etwas kürzer und übersichtlicher ausfallen, da wir “nur” das Interface ArrayAccess zu unserem Custom_Model implementieren werden.

Das Interface schreibt genau vier Methoden vor, durch die wir ein Objekt wie ein Array verwenden können.

Zuerst passen wir das Interface Custom_Model_Interface an, indem wir ArrayAccess erweitern.

<?php
interface Custom_Model_Interface
    extends ArrayAccess
{
}

Danach müssen wir in der Klasse Custom_Model die entsprechenden Methoden implementieren.

<?php
class Custom_Model implements Custom_Model_Interface
{
  public function offsetExists() {}
  public function offsetGet() {}
  public function offsetSet() {}
  public function offsetUnset() {}
}

Wer bei den letzten Artikeln aufgepasst hat, der wird wissen, was nun folgt. Genau, wir können bereits vorhandenen Code nutzen und müssen die Aufrufe nur weiterleiten.

public function offsetExists($offset)
{
  return $this->keyExists($offset);
}

public function offsetGet($offset)
{
  return $this->_get($offset);
}

public function offsetSet($offset, $value)
{
  return $this->_set($offset, $value);
}  

public function offsetUnset($offset)
{
  // ...
}

Das war es auch schon. Nun können wir das Model auch mit der Array-Schreibweise verwenden.

$model['id'] = 42;
echo $model['id'];

Da wir auch in diesem Zusammenhang wieder ein Unset dabei haben, könnte man überlegen, auch dafür eine eigene interne Methode anzulegen, um die Verarbeitung zu vereinheitlichen.

protected _unset($key)
{
  // Loggen oder was auch immer
}

Beim nächsten Mal geht es dann darum, das Iterator-Interface zu verbauen, bevor unser Objekt observerfähig wird.

2 Kommentare

  1. Pingback: Es ist ein Model und es sieht gut aus « ebene7

  2. Pingback: Es ist ein Model und es sieht gut aus – Die Magie – Part 1 « ebene7

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.


Schlagwörter: A/B-Test, AbstractType, Adapter, AddOn, Administration, Ajax, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, Auftrag, Ausbildung, Auswertung, Authentifizierung, AutoLoader, AWS, Bedienung, Bedingung, Benchmark, Berechtigung, Berlin, Bildbearbeitung, Bildschirmfoto, Blog, Blogroll, BOM, Bootstrap, Bot, Browser, Bugtracker, Byte Order Mark, Bücher, Cache, CakePHP, Call-Center, Callback, CamelCase, Canvas, Captcha, CDN, Cheatsheet, CLI, Clickout, Closure, Cloud, CodeSniffer, Collection, Community, Comparator, Config, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CRUD, CSS, CSV, CustomLibrary, Custom_Model, Daemon, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Datum, Debug, Decorator, Dekorierer, Design, Design Patterns, Doctrine, Dokumentation, Dump, Duplikat, each, EC2, Eclipse, Email, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Event, Eventhandling, Exception-Handling, Extension, Facebook, Factory, Fallback, Fehler, Fehlermeldung, Filter, Firefox, Flash, flexigrid, Foreach, Formatierung, Formular, Framework, FTP, Funktion, Futon, ga:pi(), Getter, Google Analytics, Hash, Hash-Bang, Header, htaccess, HTML5, htpasswd, HTTP, HTTPS, IDE, If, Implementierung, InnoDB, Interceptor, Interface, Internet Explorer, isset, Iterator, Java, JavaScript, Job, jQuery, Kommentar, Konfiguration, Konsole, Kontrollstruktur, kopieren, kostenlos, Kundenbetreuung, Late Static Binding, Layout, Links, Linux, Listeners, Lizenz, Logging, Löschen, Magento, Magic Methods, Manual, ManyToMany, Marketing, Methode, Model, Monolog, MVC, MySQL, NetBeans, Network, Nirvanix, Objekt, Observable, Observer, OneToMany, Online Tool, OOP, Open Source, Operator, OR-Mapper, Order, ORM, O’Reilly, Parameter, Partnersuche, Passwort, Performance, PHP, php.ini, PHP hates me, phpMyAdmin, PHPUnit, Plugin, Popup, Proxy, Prüfsumme, Prüfung, QR-Code, Qualitätssicherung, Query, Queue, Redesign, Refactoring, Reflection, Request, Response, Responsive Design, Rest-API, Rockstar, Rollback, Routing, S3, Samba, Scheifen, Schleife, Schutz, Screenshot, Secure Shell, Selbstreferenz, Server, Setter, setTimeout, Shop, Sicherheit, Sicherung, Sichtbarkeit, Singleton Pattern, Skin, SOAP, Social Network, Software, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, Splittest, SSH, SSL, Stammtisch, Statement, static, Statistik, Status, Stellvertreter, Strategy Pattern, Stream, String, Stuttgart, Stylesheet, Subversion, Sun VirtualBox, Support, SVN, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Theme, Thumbnail, Tool, Tour, Tracking, Twig, Twitter, Type-Cast, Ubuntu, Umwandlung, Underscore, unset, Update, Upload, Url, User Story, Validierung, Vererbung, Versionskontrolle, Versionsnummer, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Warteschlange, Webserver, Webservice, Weiterleitung, Werkzeug, Windows, WindowsAzure, WordPress, Wrapper, Writer, XML, Youtube, Zeitschleife, Zeitsteuerung, Zend Framework, Zend_Application, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Reflection, Zend_Service, ZPress, Zugangskontrolle, Zugriffsmethode