66 lines
2.1 KiB
PHP
66 lines
2.1 KiB
PHP
<?php namespace Laravel\Facades;
|
|
|
|
use Laravel\IoC;
|
|
|
|
/**
|
|
* The Laravel framework makes thorough use of dependency injection assisted by an application
|
|
* inversion of control container. This allows for great flexibility, easy testing, and better
|
|
* architecture. However, most PHP framework users may be used to accessing classes through
|
|
* a variety of static methods. Laravel provides "facades" to simulate this behavior while
|
|
* still using heavy dependency injection.
|
|
*
|
|
* Each class that is commonly used by the developer has a corresponding facade defined in
|
|
* this file. All of the various facades inherit from the abstract Facade class, which only
|
|
* has a single __callStatic magic method. The facade simply resolves the requested class
|
|
* out of the IoC container and calls the appropriate method.
|
|
*/
|
|
abstract class Facade {
|
|
|
|
/**
|
|
* Magic Method for passing methods to a class registered in the IoC container.
|
|
* This provides a convenient method of accessing functions on classes that
|
|
* could not otherwise be accessed staticly.
|
|
*
|
|
* Facades allow Laravel to still have a high level of dependency injection
|
|
* and testability while still accomodating the common desire to conveniently
|
|
* use classes via static methods.
|
|
*/
|
|
public static function __callStatic($method, $parameters)
|
|
{
|
|
$class = IoC::resolve(static::$resolve);
|
|
|
|
$count = count($parameters);
|
|
|
|
if ($count > 5)
|
|
{
|
|
return call_user_func_array(array($class, $method), $parameters);
|
|
}
|
|
elseif ($count == 0)
|
|
{
|
|
return $class->$method();
|
|
}
|
|
elseif ($count == 1)
|
|
{
|
|
return $class->$method($parameters[0]);
|
|
}
|
|
elseif ($count == 2)
|
|
{
|
|
return $class->$method($parameters[0], $parameters[1]);
|
|
}
|
|
elseif ($count == 3)
|
|
{
|
|
return $class->$method($parameters[0], $parameters[1], $parameters[2]);
|
|
}
|
|
elseif ($count == 4)
|
|
{
|
|
return $class->$method($parameters[0], $parameters[1], $parameters[2], $parameters[3]);
|
|
}
|
|
elseif ($count == 5)
|
|
{
|
|
return $class->$method($parameters[0], $parameters[1], $parameters[2], $parameters[3], $parameters[4]);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
class Session extends Facade { public static $resolve = 'laravel.session'; } |