一、use的概念
在PHP里,利用use语句可以引入全局命名空间或者命名空间中的一个或多个类,使得可以方便的在脚本中使用外部的类。使用 use 语句是必须的,因为在 PHP 中没有未限定命名空间的函数或常量调用方法。在同样的命名空间中可以直接使用该名称,但不同的命名空间中的名称,必须使用其完全限定名称(包含其命名空间前缀的名称)来访问。
二、use的语法
使用use时,可以通过 “use namespace\Class as AnotherClass”指定要引入的类之外,也可以设置别名;use语句需要放到命名空间声明的后面,但是在类声明语句之前。use语句可以空行分隔以提高代码可读性。
use \Namespace\Class; use \Namespace\Class as ClassName;
三、use的实例
下面是一个简单的示例,演示了如何使用use语句:
namespace Foo; use Bar\Baz\ClassB; // ClassB 类现在可以直接使用 $bar = new ClassB;
命名空间Foo在最前面声明,use语句在Foo声明之后。现在可以直接创建一个Baz\ClassB对象,不需要再使用完全限定名称。
四、use的常见用法
1. 引入不同命名空间下的类
Example:
namespace App\Http\Controllers; use App\User; use App\Repositories\UserRepository; class UserController extends Controller { protected $user; protected $userRepo; public function __construct(User $user, UserRepository $userRepo) { $this->user = $user; $this->userRepo = $userRepo; } }
上面的例子中,User和UserRepository这两个类是在不同的命名空间下,使用use语句来引入它们。由于use语句的存在,我们在构造函数时就可以直接使用User和UserRepository,而不需要使用其完全限定名称。
2. 引用类的别名
Example:
namespace App\Http\Controllers; use Illuminate\Http\Request as RequestData; use App\Http\Controllers\Controller as BaseController; class UserController extends BaseController { public function index(RequestData $request) { // ... } }
request类使用了别名RequestData,BaseController使用了别名BaseController,以提高代码的可读性。
3. 引入命名空间下的所有类
Example:
namespace App\Http\Controllers; use Illuminate\Support\Facades\View; class UserController extends Controller { public function index() { $view = View::make('user.profile'); // ... } }
在上面的例子中,use语句引入了Illuminate\Support\Facades中的View类,即通过该语句导入了该命名空间下的所有类。
五、use的注意事项
1. use语句必须在类的内部的顶部声明。
2. use语句包含在命名空间之内。
3. 可以同时对一个命名空间或命名空间下的多个类定义别名。
4. 在从另一个命名空间中导入名称时,可以将名称定义为直接类名称,让 PHP 在当前命名空间中查找该名称的类。
5. 可以对导入的名称使用namespace操作符来进行限制(例如,将命名空间分配给别名)。
六、总结
使用use语句可以方便的在脚本中使用外部的类。在遇到类名相同的情况时,可以用use语句为其中一个类设置别名,提高代码的可读性。但是,在使用use语句时需要遵循它的语法和注意事项,以免导致代码出错。