通过“use”关键字访问类或将其声明为“new”加上类的文件路径有什么区别?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//if accessed using use keyword
use App\Entity\User;
class SampleController extends Controller
{
public function add(Request $request)
{
//if declared by "use" keyword above
$user = new User();
//if not declared by "use" keyword
$user = new \App\Entity\User();
}
}
如果我要使用User
类的函数,结果是相同的,但它们的声明有什么不同?
答案 0 :(得分:2)
没有区别。使用UserControl
不包含任何内容。它只是将指定的命名空间(或类)导入当前范围
public UserControl()
{
InitializeComponent();
this.Loaded += (s, e) =>
{
_users = DataContext as ObservableCollection<UserControlModel>;
};
}
与ItemsSource
您可以找到更多详情How does the keyword "use" work in PHP and can I import classes with it?
答案 1 :(得分:2)
use
关键字为类或命名空间生成别名。
as
关键字引入了别名。如果没有as
,别名是命名空间或类路径的最后一个组件:
use App\Entity\User as OneUser;
OneUser
与\App\Entity\User
相同,可以在当前文件中的任何位置使用它代替它。
use App\Entity\User;
别名为User
(App\Entity\User
的最后一个组成部分)。它与(但短于)相同:
use App\Entity\User as User;
别名用于少写;代码更容易以这种方式阅读。
别名在编译时处理,它们仅在创建它们的文件中可见。仅仅存在use
声明没有任何效果;它只为类或命名空间创建一个较短的名称,但这个较短的名称仅在编译包含它的文件时才有效。
别名类名称不会在字符串内扩展。在编译期间,它们只是文本。在运行时期间,'User'
与'App\Entity\User'
不同。
因此,class_exists('User')
会返回FALSE
,但class_exists('App\Entity\User')
会返回TRUE
。
有关PHP如何解析别名的更多见解,请阅读"Using namespaces: Basics"文档页面。