Diskuze: Vlastní anotace a DI
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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š.
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
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.
To je tak, když si po hodině všimnu, že jsem vlastně psal někde komentář a neodeslal ho
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
Zobrazeno 9 zpráv z 9.