Hubert

Services

Wie wir im Bereich der Konfiguration gesehen haben, werden Services als Factories definiert:

"factories" => array(
    "test" => array(\src\service\test::class, 'factory'),
    "add" => array(\src\service\add::class, 'factory'),
),

Services stehen anschließend über den definierten Namen zur Verfügung. Im Bespiel über hubert()->test. Die Factory ist dabei eine statische Funktion.

<?php

namespace src\service;

class test {

    public static function factory($hubert){
        return new static();
    }

    public function returnTest(){
        return "blub";
    }

}

Ruft man $wert = hubert()->test->retrunTest() auf, erhält man $wert = "blub". Bei der erstmaligen Verwendung des Services wird die Factory ausgeführt. Ein weiteres Beispiel wäre ein Service, welcher eine direkt aufrufbare Funktion bereitstellt:

<?php

namespace src\service;

class add {

    public static function factory($hubert){
        return new static();
    }

    public function __invoke($a, $b){
        return $a + $b;
    }

}

In diesem Fall kann man über $c = hubert()->add(2,3) zwei Zahlen addieren. Die Services sind in der Konfiguration überschreibbar. Wird in einer Konfigurationsdatei, welche auf .global.php endet ein Service definiert, welcher auch in einer Datei, welche auf .local.php endet definiert ist, so wird nur der Service, welcher in der local-Datei definiert ist initialisiert.