use 关键字
本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 11 课,共 91 课。
每次使用类时都写出完整的命名空间路径,可能会很麻烦。use 关键字可以让你在文件顶部导入类,这样你就能用它的短名称来引用它。
你可以只导入一次,而不用反复编写 \Blog\User:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
当你需要使用来自不同命名空间且名称相同的类时,可以使用 as 关键字创建别名:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
echo $blogger->name . "\n";
echo $customer->email . "\n";
输出:
Alice
alice@example.com
你也可以使用分组导入,从同一个命名空间导入多个类:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
要点:use 语句必须放在 namespace 声明(如果有)之后,并且放在其他任何代码之前。它可以省去重复的命名空间路径,让代码更简洁、更易读。
挑战
简单我们将使用 use 关键字来导入类,以便整理消息应用,并避免到处编写完整的命名空间路径。
你将创建三个协同工作的文件:
Messaging/Email.php:在Messaging命名空间中定义一个Email类。它应包含一个public $address属性、一个接收并设置地址的构造函数,以及一个返回"Sending email to [address]"的send()方法。Messaging/SMS.php:在Messaging命名空间中定义一个SMS类。它应包含一个public $phone属性、一个接收并设置电话号码的构造函数,以及一个返回"Sending SMS to [phone]"的send()方法。main.php:引入这两个类文件,然后使用use关键字导入这两个类。创建一个地址为"alice@example.com"的Email对象,以及一个电话号码为"555-1234"的SMS对象。分别调用每个对象的send()方法并打印结果(每个结果单独占一行)。
在 main.php 中,你不必编写 new \Messaging\Email(...),而是在文件顶部使用 use 语句导入这些类,这样就可以直接写 new Email(...) 和 new SMS(...)。
亲手试试
<?php
// 引入类文件
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: 使用 'use' 关键字从 Messaging 命名空间导入这两个类
// 这样你就可以写 'new Email(...)',而不用写 'new \Messaging\Email(...)'
// TODO: 创建一个地址为 "alice@example.com" 的 Email 对象
// TODO: 创建一个电话号码为 "555-1234" 的 SMS 对象
// TODO: 分别打印每个对象调用 send() 的结果,每个结果占一行
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: PHP 在线编译器