下面由laravel教程栏目给大家介绍laravel facade 的详细解读,希望对需要的朋友有所帮助!
大家好,今天带来的内容是 Laravel 的 Facade 机制实现原理。
数据库的使用:
$users = DB::connection('foo')->select(...);众所周知,IOC容器是 Laravel 框架的最最重要的部分。它提供了两个功能,IOC和容器。
这次不准备讲解IOC容器的具体实现,之后会有文章详细解读它。关于IOC容器,读者只需要记住两点即可:
instances[$name];
}
public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();
if (! $instance) {
throw new RuntimeException('A facade root has not been set.');
}
switch (count($args)) {
case 0:
return $instance->$method
();
case 1:
return $instance->$method($args[0]);
case 2:
return $instance->$method($args[0], $args[1]);
case 3:
return $instance->$method($args[0], $args[1], $args[2]);
case 4:
return $instance->$method($args[0], $args[1], $args[2], $args[3]);
default:
return call_user_func_array([$instance, $method], $args);
}
}
}代码说明:
TEST1 的具体逻辑:
TEST1 类的Facade:
使用:
use facades\Test1Facade;Test1Facade::hello(); // 这是 Facade 调用解释:
- facades\Test1Facade 调用静态方法 hello() 时,由于没有定义此方法,会调用 __callStatic;
- 在 __callStatic 中,首先是获取对应的实例,即
return static::$app->instances[$name];。这其中的$name,即为facades\Test1里的 test1- $app, 即为 IOC 容器,类的实例化过程,就交由它来处理。