{"id":15029025,"url":"https://github.com/phoenixrvd/oda","last_synced_at":"2026-02-27T17:06:36.343Z","repository":{"id":57039108,"uuid":"87853601","full_name":"phoenixrvd/oda","owner":"phoenixrvd","description":"API-Package for simplify access from Data-Block of an object, without implementing from getters and setters.","archived":false,"fork":false,"pushed_at":"2018-02-28T10:33:18.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-13T06:33:15.522Z","etag":null,"topics":["clean-code","composer-package","decorator-pattern","magic-method","mit","open-source","php-library","php56","php70","php71","php72"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phoenixrvd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-10T20:15:50.000Z","updated_at":"2018-02-28T10:10:13.000Z","dependencies_parsed_at":"2022-08-23T23:31:01.700Z","dependency_job_id":null,"html_url":"https://github.com/phoenixrvd/oda","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/phoenixrvd/oda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoenixrvd%2Foda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoenixrvd%2Foda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoenixrvd%2Foda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoenixrvd%2Foda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phoenixrvd","download_url":"https://codeload.github.com/phoenixrvd/oda/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoenixrvd%2Foda/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29905612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T14:46:13.553Z","status":"ssl_error","status_checked_at":"2026-02-27T14:46:10.522Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clean-code","composer-package","decorator-pattern","magic-method","mit","open-source","php-library","php56","php70","php71","php72"],"created_at":"2024-09-24T20:09:35.343Z","updated_at":"2026-02-27T17:06:36.328Z","avatar_url":"https://github.com/phoenixrvd.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Object Data Accessor (ODA)\n\n\n[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg)](https://php.net/)\n[![Latest Stable Version](https://poser.pugx.org/phoenixrvd/oda/v/stable.svg)](https://packagist.org/packages/phoenixrvd/oda)\n[![composer.lock](https://poser.pugx.org/phoenixrvd/oda/composerlock)](https://packagist.org/packages/phoenixrvd/oda)\n[![License](https://poser.pugx.org/phoenixrvd/oda/license)](https://packagist.org/packages/phoenixrvd/oda)\n\n[![Build Status](https://travis-ci.org/phoenixrvd/oda.png?branch=master)](https://travis-ci.org/phoenixrvd/oda)\n[![Code Climate](https://codeclimate.com/github/phoenixrvd/oda.png)](https://codeclimate.com/github/phoenixrvd/oda)\n[![StyleCI](https://styleci.io/repos/87853601/shield?branch=master)](https://styleci.io/repos/87853601)\n[![Test Coverage](https://codeclimate.com/github/phoenixrvd/oda/badges/coverage.svg)](https://codeclimate.com/github/phoenixrvd/oda/coverage)\n[![BCH compliance](https://bettercodehub.com/edge/badge/phoenixrvd/oda)](https://bettercodehub.com/results/phoenixrvd/oda)\n[![Latest Unstable Version](https://poser.pugx.org/phoenixrvd/oda/v/unstable.svg)](https://packagist.org/packages/phoenixrvd/oda)\n\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n\n- [Features](#features)\n- [Installation](#installation)\n- [Basics](#basics)\n- [IDE-Helper](#ide-helper)\n- [Standard-Accessoren](#standard-accessoren)\n- [Eigene-Accessoren](#eigene-accessoren)\n  - [Beispiel](#beispiel)\n- [Hinweis](#hinweis)\n- [Testing](#testing)\n- [Copyright and license](#copyright-and-license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n\n## Features \n\n* Vereinfacht das Nutzen von Datenhaltungsobjekten.\n* Erhöht die Lesbarkeit von Quellcode, durch das Minimieren von LOC.\n* Standardisiert DAO-Schicht mit einem kleinem Package, ohne große Frameworks.\n\n## Installation\n\nBei der Installation ist [Composer](https://getcomposer.org/download/) vorausgesetzt. \n\n```bash\ncomposer require phoenixrvd/oda\n```\n\n## Basics\n\nAngenommen, braucht man ein ein Objekt, welches genau 2 Datenfelder hat (foo und bar).\n\nDeklariert man Standard-Methoden, wird das Objekt wie Folgt aussehen: \n\n```php\n\u003c?php\n\nclass MyDataObject {\n\n    private $data = [];\n    \n    public function getFoo(){\n        return $this-\u003edata['foo'];\n    }\n    \n    public function setFoo($value){\n        $this-\u003edata['foo'] = $value;\n        return $this;\n    }\n    \n    public function hasFoo(){\n        return isset($this-\u003edata['foo']);\n    }\n    \n    public function isFoo($value){\n        return $this-\u003ehasFoo() \u0026\u0026 $this-\u003edata['foo'] === $value;\n    }\n    \n    public function getBar(){\n        return $this-\u003edata['bar'];\n    }\n    \n    public function setBar($value){\n        $this-\u003edata['bar'] = $value;\n        return $this;\n    }\n    \n    public function hasBar(){\n        return isset($this-\u003edata['bar']);\n    }\n    \n    public function isBar($value){\n        return $this-\u003ehasBar() \u0026\u0026 $this-\u003edata['bar'] === $value;\n    }\n\n}\n```\nHätte man nicht 2 sondern 10 Properties, wird das Object gleich um 300 LOC länger.\n\nNutzt man das Packet, bekommt man gleiche Funktionalität wesentlich kompakter. Auch wenn anzahl von Datenfelder wächst,\nvergrößert man nicht den Code-Basis.\n\nIm Beispiel Unten ist vorheriges Objekt umgeschrieben: \n\n```php\n\u003c?php\n\nuse PhoenixRVD\\ODA\\Interfaces\\OdaObject;\nuse PhoenixRVD\\ODA\\Traits\\DataAccessors;\nuse PhoenixRVD\\ODA\\Traits\\ValueObject;\n\nclass MyDataObject implements OdaObject {\n\n    use ValueObject, DataAccessors;\n\n}\n```\n\n## IDE-Helper\n\nDamit die IDE auch alle Objekt-Methoden kennt und man Autovervollständigung nutzen kann, sollte man die Methoden\nin der Klasse-Signatur festlegen. \n\nEs ist aber immer noch kompakter als vorher.\n\n```php\n\u003c?php \n\n/**\n * @method $this  setFoo(mixed $value)\n * @method string getFoo()\n * @method bool   isFoo(mixed $value)\n * @method bool   hasFoo()\n *\n * @method $this  setBar(mixed $value)\n * @method string getBar()\n * @method bool   isBar(mixed $value)\n * @method bool   hasBar()\n */\n```\n\n## Standard-Accessoren\n\nStandard-Präfixes:\n\n| Präfix        | Beschreibung                                                                              |\n|---------------|-------------------------------------------------------------------------------------------|\n| **get**       | Gibt Wert eines Feldes zurück                                                             |\n| **set**       | Setzt Wert eines Feldes                                                                   |\n| **is(value)** | Prüftob Wert exakt dem ```value``` Parameter entspricht (Vergleich mit ```===```)         |\n| **has**       | Prüft ob das Objekt ein Feld für Daten enthält (Equivalent: ```isset($array['value'])```) |\n| **asJSON**    | Gibt Wert eines Feldes als formatiertes JSON-String zurück.                               |\n\n## Eigene-Accessoren\n\nManchmal braucht man, dass bestimmte Felder eines Objektes formatiert zurückgegeben werden. \n\nZ.b. ```$this-\u003edata['created_at']``` ist Unix-Timestamp, man braucht es aber als RFC822-Datum.\n \nIm [Bespiel](#beispiel) ist beschrieben, wie man der API ein **date** - Accessor beibringt. Damit wird voll automatisch \nUnix-Timestamp nach Datum konvertieren und man es mit ```$this-\u003edateCreatedAt()``` überall verwenden kann.\n  \n### Beispiel\n\n1. Accessor-Klasse anlegen\n\n```php\n\u003c?php \n\nuse PhoenixRVD\\ODA\\Methods\\AbstractMethod;\nuse PhoenixRVD\\ODA\\Interfaces\\OdaObject;\n\nclass DateRFC822 extends AbstractMethod {\n\n    public function execute(OdaObject $object, array $attributes = array()) {\n        $data = $object-\u003egetData();\n\n        return date(DATE_RFC822, $data[ $this-\u003epropertyName ]);\n    }\n}\n```\n\n2. Trait für Wiederverwendbarkeit anlegen\n \n ```php\n\u003c?php\n\nuse PhoenixRVD\\ODA\\MethodFactory;\n\ntrait MyObjectDecorator {\n\n    public function __call($name, $arguments) {\n        return (MethodFactory::getInstance())\n            -\u003esetAccessor(new DateRFC822) // Eigenes Accessor bei der Factory registrieren\n            -\u003emakeMethod($name)\n            -\u003eexecute($this, $arguments);\n    }\n\n}\n```\n\n3. Eigenes Trait an Stelle von Standard-Trait im Object verwenden. \n\n```php\n\u003c?php\n\nuse PhoenixRVD\\ODA\\Interfaces\\OdaObject;\nuse PhoenixRVD\\ODA\\Traits\\ValueObject;\n\nclass MyDataObject implements OdaObject {\n\n    use ValueObject, MyObjectDecorator;\n\n}\n```\n\n4. Einfach die Methode aufrufen\n \n```php\n\u003c?php\n\n// Ausgabe: Tue, 11 Apr 2017 21:22:14 +0000\necho (new MyDataObject())-\u003esetCreatedAt(1491945734)-\u003edateCreatedAt(); \n```\n\n## Hinweis\n\nProjekte, die auf sehr hohe Leistung ausgelegt sind, sollten auf die Methodik generell verzichten. Diskussion dazu findet man \n[hier](http://stackoverflow.com/questions/3330852/get-set-call-performance-questions-with-php).\n  \n## Testing\n\n```bash\ncomposer oda:test\n```\n\n## Copyright and license\n\nCode released under the [MIT License](LICENSE). \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoenixrvd%2Foda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphoenixrvd%2Foda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoenixrvd%2Foda/lists"}