【问题标题】:Laravel 4 Auth Scope ResolutionLaravel 4 Auth 范围解析
【发布时间】:2014-07-09 07:47:10
【问题描述】:

我喜欢花时间研究框架是如何编码的,以试图改进我的代码。

据我所知,PHP 中的作用域解析运算符将类中的函数调用为静态函数,这意味着您无权访问“$this”,因为该类尚未实例化。

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

如果函数被调用为静态方法,谁能向我解释他们如何检索实例属性?

这里是 Laravel Auth 的 github 原始文件的链接

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

【问题讨论】:

    标签: php authentication laravel laravel-4


    【解决方案1】:

    Laravel 使用称为 Facades 和控制反转 (IoC) 的开发模式来对某些对象(“Facade”)进行静态调用并检索对象的实际实例(从 IoC 容器中)以调用方法上。

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

    这允许您 1) 编写 Auth::check() 而不是 $auth = new Auth; $auth->check() 和 2) 让 IoC 容器围绕实际创建您想要的实例做所有的脏活,所以如果以后实现细节发生变化,您就没有重写任何使用 Auth 类的代码。

    有关更多信息,请参阅this documentation page 了解外观和this question 了解 IoC 的一般信息。

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

    【讨论】:

    • 太棒了。谢谢你。我有一个在 Codeigniter 中开发的应用程序。我很想将它移植到 Laravel,但这会非常耗时。我喜欢 Laravel 身份验证系统,并且正在考虑尝试移植它。非常感谢
    • 祝你好运,很高兴我能帮上忙
    【解决方案2】:

    这是一个门面。

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      相关资源
      最近更新 更多