public function testFromArrayNested()
 {
     $array = ArrayObject::fromArray(["a" => "b", "c" => ["d" => "e"]]);
     $this->assertInstanceOf("Loops\\ArrayObject", $array);
     $this->assertInstanceOf("Loops\\ArrayObject", $array["c"]);
     $this->assertSame("e", $array["c"]["d"]);
 }
Beispiel #2
0
 /**
  * Creates an "Loops\ArrayObject" from a normal PHP array.
  * Nested arrays will recursively converted.
  *
  * @param array $input The input array
  * @return Loops\ArrayObject The input array as a "Loops\ArrayObject".
  */
 public static function fromArray(array $input)
 {
     $input = array_map(function ($value) {
         return is_array($value) ? ArrayObject::fromArray($value) : $value;
     }, $input);
     return new ArrayObject($input);
 }
 public function filter($value)
 {
     if (is_array($value)) {
         $value = ArrayObject::fromArray($value);
     }
     if (is_null($value)) {
         $value = new ArrayObject();
     }
     return $value;
 }
Beispiel #4
0
<?php

use Loops\ArrayObject;
$c["test"] = "test";
$c["session"]["plugin"] = "Test";
$c["config_test_service"]["a"] = "c";
$c["config_test_service"]["other"] = "other";
// keep quiet (stderr logging is enabled on default)
$c["logger"]["plugin"] = "";
return ArrayObject::fromArray($c);
Beispiel #5
0
 public function testCreateServiceMergingConfig()
 {
     $name = uniqid();
     $loops = new Loops(ArrayObject::fromArray([$name => ["a" => "b"]]));
     $loops->registerService($name, "LoopsTestServiceMock");
     $service = $loops->createService($name, NULL, FALSE);
     $this->assertInstanceOf("LoopsTestServiceMock", $service);
     $this->assertSame("a", $service->a);
     $service = $loops->createService($name, NULL, TRUE);
     $this->assertInstanceOf("LoopsTestServiceMock", $service);
     $this->assertSame("b", $service->a);
     $service = $loops->createService($name, ArrayObject::fromArray(["a" => "c"]), TRUE);
     $this->assertInstanceOf("LoopsTestServiceMock", $service);
     $this->assertSame("c", $service->a);
 }
Beispiel #6
0
 /**
  * Creates a new instance of a service
  *
  * @param $name The service name
  * @param array $config
  * @return Loops\Service\ServiceInterface The new service
  */
 public function createService($name, ArrayObject $config = NULL, $merge_into_config = FALSE)
 {
     if ($merge_into_config) {
         $service_config = $this->config->offsetExists($name) ? $this->config->offsetGet($name) : new ArrayObject();
         if (is_array($service_config)) {
             $service_config = ArrayObject::fromArray($service_config);
         }
         if ($config) {
             $service_config->merge($config);
         }
     } else {
         $service_config = $config ?: new ArrayObject();
     }
     if (!$this->hasService($name)) {
         throw new Exception("Service '{$name}' does not exist.");
     }
     $service = $this->services[$name];
     if (array_key_exists("classname", $service)) {
         $reflection = new ReflectionClass($service["classname"]);
         $params = new ArrayObject($service["params"]);
         $params->merge($service_config);
         if ($reflection->implementsInterface("Loops\\ServiceInterface")) {
             return call_user_func_array([$service["classname"], "getService"], [$params, $this]);
         } else {
             $params->offsetSet("loops", $this);
             return Misc::reflectionInstance($service["classname"], $params);
         }
     }
     if (array_key_exists("callback", $service)) {
         $params = new ArrayObject($service["params"]);
         $params->merge($service_config);
         return call_user_func_array($service["callback"], $params->toArray());
     }
     if (array_key_exists("object", $service)) {
         return $service["object"];
     }
 }