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); }
/** * 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"]; } }