/var/www/hkosl.com/imusiccircle/webadmin/libraies/illuminate/support/Illuminate/Support/Manager.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php namespace Illuminate\Support;

use 
Closure;

abstract class 
Manager {

    
/**
     * The application instance.
     *
     * @var \Illuminate\Foundation\Application
     */
    
protected $app;

    
/**
     * The registered custom driver creators.
     *
     * @var array
     */
    
protected $customCreators = array();

    
/**
     * The array of created "drivers".
     *
     * @var array
     */
    
protected $drivers = array();

    
/**
     * Create a new manager instance.
     *
     * @param  \Illuminate\Foundation\Application  $app
     * @return void
     */
    
public function __construct($app)
    {
        
$this->app $app;
    }

    
/**
     * Get a driver instance.
     *
     * @param  string  $driver
     * @return mixed
     */
    
public function driver($driver null)
    {
        
$driver $driver ?: $this->getDefaultDriver();

        
// If the given driver has not been created before, we will create the instances
        // here and cache it so we can return it next time very quickly. If there is
        // already a driver created by this name, we'll just return that instance.
        
if ( ! isset($this->drivers[$driver]))
        {
            
$this->drivers[$driver] = $this->createDriver($driver);
        }

        return 
$this->drivers[$driver];
    }

    
/**
     * Create a new driver instance.
     *
     * @param  string  $driver
     * @return mixed
     *
     * @throws \InvalidArgumentException
     */
    
protected function createDriver($driver)
    {
        
$method 'create'.ucfirst($driver).'Driver';

        
// We'll check to see if a creator method exists for the given driver. If not we
        // will check for a custom driver creator, which allows developers to create
        // drivers using their own customized driver creator Closure to create it.
        
if (isset($this->customCreators[$driver]))
        {
            return 
$this->callCustomCreator($driver);
        }
        elseif (
method_exists($this$method))
        {
            return 
$this->$method();
        }

        throw new \
InvalidArgumentException("Driver [$driver] not supported.");
    }

    
/**
     * Call a custom driver creator.
     *
     * @param  string  $driver
     * @return mixed
     */
    
protected function callCustomCreator($driver)
    {
        return 
$this->customCreators[$driver]($this->app);
    }

    
/**
     * Register a custom driver creator Closure.
     *
     * @param  string   $driver
     * @param  Closure  $callback
     * @return \Illuminate\Support\Manager|static
     */
    
public function extend($driverClosure $callback)
    {
        
$this->customCreators[$driver] = $callback;

        return 
$this;
    }

    
/**
     * Get all of the created "drivers".
     *
     * @return array
     */
    
public function getDrivers()
    {
        return 
$this->drivers;
    }

    
/**
     * Dynamically call the default driver instance.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    
public function __call($method$parameters)
    {
        return 
call_user_func_array(array($this->driver(), $method), $parameters);
    }

}