Menu
CoddyTech

Từ khóa use

Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 11 trên 91.

Việc viết đầy đủ đường dẫn namespace mỗi khi dùng một lớp có thể trở nên phiền phức. Từ khóa use cho phép bạn nhập một lớp ở đầu tệp, để bạn có thể tham chiếu lớp đó bằng tên ngắn.

Thay vì viết \Blog\User nhiều lần, bạn có thể import một lần:

<?php
use Blog\User;

$user = new User("Alice");
echo $user->name;

Khi cần dùng các lớp từ nhiều không gian tên khác nhau nhưng trùng tên, bạn có thể tạo bí danh bằng từ khóa 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";

Đầu ra:

Alice
alice@example.com

Bạn cũng có thể nhập nhiều lớp từ cùng một không gian tên bằng cách dùng cú pháp nhập nhóm:

<?php
use Blog\{User, Post, Comment};

$user = new User("Alice");
$post = new Post("Hello World");

Điểm chính: Câu lệnh use phải xuất hiện sau khai báo namespace (nếu có) và trước mọi đoạn code khác. Câu lệnh này giúp code gọn gàng, dễ đọc hơn bằng cách loại bỏ các đường dẫn namespace lặp lại.

challenge icon

Thử thách

Dễ

Hãy tổ chức ứng dụng nhắn tin bằng từ khóa use để nhập các lớp gọn gàng và tránh phải viết đầy đủ đường dẫn không gian tên ở mọi nơi.

Bạn sẽ tạo ba tệp phối hợp với nhau:

  • Messaging/Email.php: Định nghĩa lớp Email trong không gian tên Messaging. Lớp này cần có thuộc tính public $address, một hàm khởi tạo nhận và gán địa chỉ, cùng phương thức send() trả về "Sending email to [address]".
  • Messaging/SMS.php: Định nghĩa lớp SMS trong không gian tên Messaging. Lớp này cần có thuộc tính public $phone, một hàm khởi tạo nhận và gán số điện thoại, cùng phương thức send() trả về "Sending SMS to [phone]".
  • main.php: Nạp cả hai tệp lớp, sau đó dùng từ khóa use để nhập cả hai lớp. Tạo một đối tượng Email với địa chỉ "alice@example.com" và một đối tượng SMS với số điện thoại "555-1234". In ra kết quả gọi send() trên mỗi đối tượng, mỗi kết quả trên một dòng riêng.

Trong main.php, thay vì viết new \Messaging\Email(...), bạn sẽ nhập các lớp ở đầu tệp bằng các câu lệnh use để có thể viết đơn giản new Email(...) và new SMS(...).

Tự làm thử

<?php
// Nạp các tệp chứa lớp (class)
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';

// TODO: Dùng từ khóa (keyword) 'use' để nhập cả hai lớp từ namespace Messaging
// Nhờ đó, bạn có thể viết 'new Email(...)' thay vì 'new \Messaging\Email(...)'


// TODO: Tạo đối tượng (object) Email với địa chỉ "alice@example.com"


// TODO: Tạo đối tượng SMS với số điện thoại "555-1234"


// TODO: In ra kết quả khi gọi send() trên từng đối tượng, mỗi kết quả trên một dòng riêng

?>
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch PHP online