Laravel 4 Auth Scope Resolution

时间:2014-05-20 21:17:12

标签: php authentication laravel laravel-4

我喜欢花时间研究框架的编码方式,以便更好地编写代码。

据我所知,PHP中的Scope Resolution运算符将类中的函数作为静态函数调用,这意味着您无法访问'$ this',因为该类尚未实例化。

但是当我开始阅读Laravel 4 Auth如何工作时,我注意到文档告诉你使用Auth :: check()或Auth :: user()来检索信息,但这些函数中的代码使用了很多'$ this'陈述。

如果函数被称为静态方法,有人可以向我解释他们如何能够检索实例属性吗?

这是Laravel Auth

的github原始文件的链接

https://raw.githubusercontent.com/illuminate/auth/master/Guard.php

2 个答案:

答案 0 :(得分:1)

Laravel使用一种称为Facades和Inversion of Control(IoC)的开发模式,以便对某些对象(' Facade')进行静态调用,并检索对象的实际实例(来自IoC) container)调用方法。

换句话说,当您执行Auth::check()Auth::user()时,那些看似静态的调用会被IoC容器中的实际对象实例替换,因此Auth::check()变为$auth->check() $auth来自容器内。

这允许您1)编写Auth::check()而不是$auth = new Auth; $auth->check()和2)让IoC容器完成所有实际创建所需实例的脏工作,因此如果实现细节稍后更改您不必重写使用 Auth类的任何代码。

有关详情,请参阅有关外墙的this documentation page和有关IoC的this question

作为旁注,Auth等中提到的Auth::check()外观实际上就是这个类:https://github.com/laravel/framework/blob/master/src/Illuminate/Support/Facades/Auth.php

答案 1 :(得分:1)

这是一个Fcade。

当你调用Auth :: {anything}时,你实际上是在调用Illuminate \ Support \ Facades \ Auth。静态方法仅用作入口点。

这是Facade设计模式的简化版本:
http://sourcemaking.com/design_patterns/facade/php