双冒号在Laravel中是什么意思?

12

示例:

Auth::guard($guard)->guest()

我不明白 Laravel 框架中双冒号(::)符号的含义。从 http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php 中了解到,它代表作用域解析运算符,用于访问类的静态、常量和重写属性或方法。但从 Laravel 中了解到,Auth 是类门面的别名,因此需要解释上述示例,尤其是 guard(parameter)->guest() 的含义。
我对 PHP 还不是很熟悉,现在正在学习 Laravel 框架作为我的后端。

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Charlotte Dunois
2
如果你正在学习PHP,我建议你要清楚地区分PHP本身和框架之间的差异。像Laravel这样的框架在幕后做了很多事情,如果你试图通过学习框架来学习PHP,你会错过很多东西并且感到困惑。 - Parziphal
@CharlotteDunois先生,感谢您的好回答。我正在从auth类中访问静态guard方法。那么guest()方法怎么样呢?为什么它可以从guard()方法中访问呢?再次感谢。 - Jsnow
1
静态方法 guard 返回一个类实例,我不知道是哪个类,但你可以通过阅读文档或使用 Laravel 的 dd(辅助函数)来转储 guard 的返回值来轻松找到它。 - Charlotte Dunois
3个回答

14

::作用域解析运算符

::被称为作用域解析运算符(又称Paamayim Nekudotayim)。该运算符用于引用某个块或程序上下文的范围,如类、对象、命名空间等。为此,在该运算符后使用标识符来访问或复现该作用域内的代码。

参考资料

Auth::guard($guard)->guest(): 在这行代码中,您正在使用静态类Authguard()方法。要使用静态类的函数,我们使用::作用域解析运算符。


1
也被称为“Paamayim Nekudotayim”,并且被PHP解析器所青睐(尤其是对于致命错误):P - Charlotte Dunois
在 Laravel 中,当我打开 Auth 类时,我只看到了一个返回 auth 字符串的 getFacadeAccessor 方法。请问如何将 guard() 和 guest() 方法与 Auth 类关联起来呢?谢谢。 - Jsnow
@Jsnow,这里没有先生,我们都处于同一水平。请查看:https://laravel.com/api/5.1/Illuminate/Auth/Guard.html - Mayank Pandeyz
感谢 @MayankPandey 先生的指导,我现在会开始学习了。 - Jsnow

5

你可能遇到这个问题是因为需要访问一个类的静态方法或属性。

例如:

class Foo
{
    public static function bar()
    {
      return "bar";
    }
}

Foo::bar // access the bar method without instantiating the Foo class.

1
基本上它被称为。
Scope resolution operator (::)

这是一个令牌,允许访问类的静态、常量和重写属性方法。
例如,在Laravel中,我们可以这样调用模型: User::select('name')->get()->toArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接