Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vlastní anotace a DI

Aktivity
Avatar
Ondra Straka
Člen
Avatar
Ondra Straka:20.8.2017 16:25

Zdravím,
ke konci školního roku, kdy jsme začínali s jazykem PHP, mě učitelka programování řekla, že nemůžu při výuce používat cizí frameworky a knihovny. Tak jsem se nasral a celé prázdniny pracuji na svém. Jediné co mi chybí jsou vlastní anotace a DI. Potřebuji, aby se obě věci dali napsat v ČISTÉM PHP. Nevíte jak na to?
Díval jsem jsem se na internetu, ale všude jsou anotace pomocí doctrine/anno­tations. Co se týče DI, tak by to zjevně šlo vytvořit podle tohoto článku .
Ale opravdu z těch anotací jsem nešťastný. Kdybyste mi něco mohli ukázat tu správnou cestu, byl bych rád.
Díky

Editováno 20.8.2017 16:25
 
Odpovědět
20.8.2017 16:25
Avatar
Thenik
Člen
Avatar
Thenik:20.8.2017 16:35

Používaš tam MVC alebo niečo podobné?

 
Nahoru Odpovědět
20.8.2017 16:35
Avatar
Ondra Straka
Člen
Avatar
Ondra Straka:20.8.2017 16:41

MVC

 
Nahoru Odpovědět
20.8.2017 16:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Ondra Straka
David Hartinger:20.8.2017 16:59

Můžeš injektovat jak chceš. Anotace jsou IMHO nejlepší, protože nemusíš pořád bušit konstruktory. O vlastním DI kontejneru teď píšu kurz, když ještě chvilku vydržíš, tak to tady najdeš.

Nahoru Odpovědět
20.8.2017 16:59
New kid back on the block with a R.I.P
Avatar
Odpovídá na Ondra Straka
Martin Konečný (pavelco1998):20.8.2017 17:11

Ahoj,
anotace by mělo jít řešit přes reflexi, viz http://php.net/…ionclass.php, ze které si vytáhneš atributy/metody a z nich anotace. Letmý nástin třeba takto:

class Test
{

        /**
         * @var Test2
         * @lazyLoad
         */
        public $test2;

        /**
         * @var int
         */
        public $number = 10;

}

$rc = new ReflectionClass("Test");

$attributes = $rc->getProperties();

foreach ($attributes as $attribute) {
        $doc = $attribute->getDocComment();

        preg_match_all("#@(.*?)\n#s", $doc, $annotationsArray);
        $annotations = array_values($annotationsArray[1]);

        foreach ($annotations as &$annotation) {
                $annotation = trim($annotation);  // ten preg_match tam nechal mezery
        }

        if (in_array("lazyLoad", $annotations)) {
                echo "class will be loaded lazy";
        }
}

Je to trochu krkolomné, musel by sis na to napsat nějaký parser, protože PHP samo o sobě asi neumí vytáhnout jednotlivé anotace, musíš postupně třída - atribut - doc comment - anotace. Nebo alespoň jiné řešení neznám.

Někde jsem četl, že reflexe v PHP není moc rychlá, takže by se asi hodilo to ještě pak nějak zacachovat :D

Editováno 20.8.2017 17:12
Nahoru Odpovědět
20.8.2017 17:11
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Ondra Straka
Neaktivní uživatel:20.8.2017 17:29

Reflexe v PHP umí číst phpdoc komentáře, viz

http://php.net/…ccomment.php
http://php.net/…ccomment.php // Tu používá třída ReflectionMethod
http://php.net/…ccomment.php

Předpokládám, že to je to, co hledáš. Smutné je, že dostaneš jenom hloupý string, který si musíš zpracovat sám.

Nahoru Odpovědět
20.8.2017 17:29
Neaktivní uživatelský účet
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Neaktivní uživatel:20.8.2017 17:30

To je tak, když si po hodině všimnu, že jsem vlastně psal někde komentář a neodeslal ho :D

Nahoru Odpovědět
20.8.2017 17:30
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Martin Konečný (pavelco1998):20.8.2017 17:52

No mně se zas občas stává, že než dopíšu můj sáhodlouhý komentář, tak to samé už řeknou tři lidi přede mnou :D

Nahoru Odpovědět
20.8.2017 17:52
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Nahoru Odpovědět
20.8.2017 20:05
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.