public function testMerge()
 {
     //test simple level merge
     $test1["a"] = 1;
     $test2["b"] = 2;
     $test3["b"] = 3;
     $arrayobject1 = new ArrayObject($test1);
     $arrayobject2 = new ArrayObject($test2);
     $arrayobject3 = new ArrayObject($test3);
     $res = $arrayobject1->merge($arrayobject2);
     $this->assertSame($arrayobject1, $res);
     $this->assertSame($arrayobject1->a, 1);
     $this->assertSame($arrayobject1->b, 2);
     //test overwrite
     $arrayobject1->merge($arrayobject3);
     $this->assertSame($arrayobject1->b, 3);
     $test1["a"] = 1;
     $test2["b"] = new ArrayObject(["c" => 2]);
     $test3["b"] = new ArrayObject(["c" => 3, "d" => 4]);
     //do the same on multi level arrays
     $arrayobject1 = new ArrayObject($test1);
     $arrayobject2 = new ArrayObject($test2);
     $arrayobject3 = new ArrayObject($test3);
     $arrayobject1->merge($arrayobject2);
     $this->assertSame($arrayobject1->a, 1);
     $this->assertSame($arrayobject1->b->c, 2);
     $arrayobject1->merge($arrayobject3);
     $this->assertSame($arrayobject1->b->c, 3);
     $this->assertSame($arrayobject1->b->d, 4);
 }
Beispiel #2
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"];
     }
 }