在学习了过程之后,我试图在PHP中学习OOP,在学习了一些理论之后,我尝试将其应用于Laravel框架的使用。我在书中发现了这部分代码,用于路由,但我在OOP中并不能真正理解它。
如果我没有错的话,第一部分在我看来是一个"Route"类的静态方法,但后来我发现了第二部分'->where('id','[0-9]+');'这似乎是动态的,相对于一个实例,让我感到困惑。
有人能帮我理解吗?
Route::get('cats/{id}', function($id){
return "Cat #$id";
})->where('id', '[0-9]+');
If I'm not wrong, the first part seems to me a static method of a 'Route' class
,对不起,您错了。实际上,Laravel
为每个组件提供了Facade
类,这里Route
是底层Router
类的Facade
。这就是Facade
类的样子:
<?php namespace Illuminate'Support'Facades;
/**
* @see 'Illuminate'Routing'Router
*/
class Route extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'router'; }
}
您可能注意到,它只包含一个方法,并返回包含该方法的original/underlying
类名,实际上它是key
名称,用于将该类添加到IoC
容器中。因此,Laravel
在幕后,从IoC
容器中创建一个Illuminate/Routing/Router.php
类的实例,并调用method
,这可能看起来不清楚,但有点棘手,不可能在这里回答更多细节,但您可以访问Laravel facade并获得更好的解释。
因此,最后,Laravel
从Router.php
类调用get()
方法,并返回Route
类/对象的一个实例,然后使用方法链接(PHP-5
特性)调用Route
类的where
方法,仅此而已。阅读类的源代码,你会有更好的想法。
检查Illuminate'Support'Facades
文件夹,您可以发现许多facade类,它们实际上是对其原始类/组件的包装。还要查看Laravel
文档中的IoC容器,有必要对其有一个清晰的了解,以便使用Laravel框架。