【发布时间】:2017-05-15 08:26:28
【问题描述】:
return $this->belongsTo(User::class);
对
return $this->belongsTo(App\User);
以上两种说法有什么区别?
【问题讨论】:
标签: php laravel-5 namespaces eloquent
return $this->belongsTo(User::class);
对
return $this->belongsTo(App\User);
以上两种说法有什么区别?
【问题讨论】:
标签: php laravel-5 namespaces eloquent
实际上,您的第二个示例无效。它必须是一个字符串:
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;
【讨论】:
特殊的 ::class 常量从 PHP 5.5.0 开始可用,并允许在编译时解析完全限定的类名,这对于命名空间类很有用:
更多请阅读 php.net 上的完整文章: https://www.php.net/manual/en/language.oop5.constants.php
【讨论】: