data as &$producer) { $producer = producer_utils::ensure_producer($producer); }; unset($producer); } function hasOvalue(string $name): bool { if ($this->_hasOobdValue($name)) { return true; } elseif ($this->sharedOobdManager !== null && $this->sharedOobdManager->hasOvalue($name)) { return true; } foreach ($this->data as $producer) { if ($producer instanceof IOobdManager && $producer->hasOvalue($name)) { return true; } } return false; } /** * l'accès aux données OOB de la chaine de producer n'est possible qu'après * l'appel de la méthode {@link setup()} */ function getOvalue(string $name, $default=null) { if ($this->_hasOobdValue($name)) { return $this->_getOobdValue($name, $default); } elseif ($this->sharedOobdManager !== null && $this->sharedOobdManager->hasOvalue($name)) { return $this->sharedOobdManager->getOvalue($name, $default); } foreach ($this->data as $producer) { if ($producer instanceof IOobdManager && $producer->hasOvalue($name)) { return $producer->getOvalue($name, $default); } } return null; } function producer() { foreach ($this->data as $producer) { if ($producer instanceof Producer) { try { yield from $producer; } finally { $producer->close(); } $this->return = $producer->getReturn(); } else { yield from $producer; } } } protected function teardown(): void { parent::teardown(); foreach ($this->data as $producer) { $producer->close(); } } }