Laravel.io
<?php

namespace core\container;

class ServiceContainer
{
    /**
     * @var array
     *
     * все классы
     */
    protected $bindings = [];
    
    /**
     * @var object
     */
    private static $instance;

    /**
     * @return ServiceContainer
     */
    public static function getInstance()
    {
        if (is_null(static::$instance)) {
            static::$instance = new static;
        }

        return static::$instance;
    }

    /**
     * @param string $key
     * @param        $object
     *
     * @return $this|void
     */
    public function set(string $key, $object)
    {
        $this->bindings[$key] = compact('object');

        return $this;
    }
    
    /**
     * @param string $key
     * @param string $alias
     *
     * @return mixed
     * @throws \Exception
     */
    public function createAlias(string $key, string $alias)
    {
        if ( ! array_key_exists($key, $this->bindings)) {
            throw new ContainerException('First you must be use set function');
        }

        if ( ! class_exists($this->bindings[$key]['object'])) {
            throw new ContainerException('Incorrect name of class');
        }

        return class_alias($this->bindings[$key]['object'], $alias);
    }

    /**
     * @param string $key
     *
     * @param null   $params
     *
     * @return mixed
     * @throws ContainerException
     */
    public function bildClass(string $key, $params = null)
    {
        if (!array_key_exists($key, $this->bindings)) {
            throw new \Exception('Incorrect key...');
        }

        return $this->instance($this->bindings[$key]['object'], $params);
    }

    /**
     * @param array $classes
     *
     * @return mixed
     */
    public function onlyLoadClass(array $classes)
    {
        foreach ($classes as $k) {
            $name = explode('\\', $k);
            $this->set(end($name), $k)->instance($k);
        }
    }

    /**
     * @param      $key
     * @param null $parameters
     *
     * @return mixed
     */
    private function instance($key, $parameters = null)
    {
        if ($key instanceof \Closure) {
            return call_user_func_array($key, $parameters);
        }

        if ( ! class_exists($key)) {
            return false;
        }

        if ('\\' != substr($key, 0, 1)) {
            mb_internal_encoding("UTF-8");
            $key = '\\'.$key;
        }

        if ( ! is_null($parameters)) {
            $reflection = new \ReflectionClass($key);

            return $reflection->newInstanceArgs($parameters);
        } else {
            return new $key;
        }
    }
}

Please note that all pasted data is publicly available.