【问题标题】:What is the difference between User::class and App\User when setting relations?设置关系时,User::class 和 App\User 有什么区别?
【发布时间】:2017-05-15 08:26:28
【问题描述】:
return $this->belongsTo(User::class);

return $this->belongsTo(App\User);

以上两种说法有什么区别?

【问题讨论】:

    标签: php laravel-5 namespaces eloquent


    【解决方案1】:

    实际上,您的第二个示例无效。它必须是一个字符串:

    return $this->belongsTo('App\User');
    

    假设它是一个字符串,这两种变体之间没有区别。

    PHP 5.5 的 class resolution (::class) 返回类的完全限定名 ({Namespace}\ClassName)。您在第一个示例中使用它。但在第二个示例中,您将手动传递类 FQN (App\User),而不使用类解析。

    重要的一点是,该类应该在上下文中可用(使用use 语句,如果不在当前命名空间中),然后您可以对它使用类解析。但是在第二种方法中,您不需要该类可用,您只需将 FQN 作为字符串传递。

    对于上下文中可用的长类 FQN,您更愿意使用类解析而不是手动传递它。

    use Illuminate\Database\Eloquent\Model;
    
    echo Model::class;
    // Outputs: Illuminate\Database\Eloquent\Model;
    

    【讨论】:

      【解决方案2】:

      特殊的 ::class 常量从 PHP 5.5.0 开始可用,并允许在编译时解析完全限定的类名,这对于命名空间类很有用:

      更多请阅读 php.net 上的完整文章: https://www.php.net/manual/en/language.oop5.constants.php

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2019-05-06
        • 2021-07-11
        • 2012-06-15
        • 2017-06-10
        • 1970-01-01
        • 2020-06-11
        • 2021-01-06
        相关资源
        最近更新 更多