Files
roi-theme/wp-content/plugins/fluent-smtp/app/Services/DB/Viocon/Container.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

141 lines
3.4 KiB
PHP
Executable File

<?php namespace FluentMail\App\Services\DB\Viocon;
class Container
{
/**
* @var array
*/
public $registry = array();
/**
* Singleton instances
*
* @var array
*/
public $singletons = array();
public function __construct($alias = null)
{
if ($alias) {
AliasFacade::setVioconInstance($this);
class_alias('\\FluentMail\\App\\Services\\DB\\Viocon\\AliasFacade', $alias);
}
}
/**
* Register an object with a key
*
* @param string $key
* @param mixed $object
* @param bool $singleton
*
* @return void
*/
public function set($key, $object, $singleton = false)
{
$this->registry[$key] = compact('object', 'singleton');
}
/**
* If we have a registry for the given key
*
* @param string $key
*
* @return bool
*/
public function has($key)
{
return array_key_exists($key, $this->registry);
}
/**
* Register as singleton.
*
* @param string $key
* @param mixed $object
*
* @return void
*/
public function singleton($key, $object)
{
$this->set($key, $object, true);
}
/**
* Register or replace an instance as a singleton.
* Useful for replacing with Mocked instance
*
* @param string $key
* @param mixed $instance
*
* @return void
*/
public function setInstance($key, $instance)
{
$this->singletons[$key] = $instance;
}
/**
* Build from the given key.
* If there is a class registered with Container::set() then it's instance
* will be returned. If a closure is registered, a closure's return value
* will be returned. If nothing is registered then it will try to build an
* instance with new $key(...).
*
* $parameters will be passed to closure or class constructor.
*
*
* @param string $key
* @param array $parameters
*
* @return mixed
*/
public function build($key, $parameters = array())
{
// If we have a singleton instance registered the just return it
if (array_key_exists($key, $this->singletons)) {
return $this->singletons[$key];
}
// If we don't have a registered object with the key then assume user
// is trying to build a class with the given key/name
if (!array_key_exists($key, $this->registry)) {
$object = $key;
} else {
$object = $this->registry[$key]['object'];
}
$instance = $this->instanciate($object, $parameters);
// If the key is registered as a singleton, we can save the instance as singleton
// for later use
if (isset($this->registry[$key]['singleton']) && $this->registry[$key]['singleton'] === true) {
$this->singletons[$key] = $instance;
}
return $instance;
}
/**
* Instantiate an instance of the given type.
*
* @param string $key
* @param array $parameters
*
* @throws \Exception
* @return mixed
*/
protected function instanciate($key, $parameters = null)
{
if ($key instanceof \Closure) {
return call_user_func_array($key, $parameters);
}
$reflection = new \ReflectionClass($key);
return $reflection->newInstanceArgs($parameters);
}
}