Câu lệnh use và không gian tên trong OOP PHP
Giả sử chúng ta có lớp Data sau:
<?php
namespace \Core\Admin;
class Data
{
public function __construct($num)
{
}
}
?>
Giả sử cũng có lớp Page, tạo
bên trong nó các đối tượng của lớp Data:
<?php
namespace Users;
class Page
{
public function __construct()
{
$data1 = new \Core\Admin\Data('1');
$data2 = new \Core\Admin\Data('2');
}
}
?>
Như bạn thấy, cả hai lớp của chúng ta nằm
trong các không gian tên hoàn toàn khác nhau, vì vậy
không thể đơn giản hóa các lời gọi đến lớp Data,
giống như chúng ta đã làm trong bài học trước.
Tuy nhiên, những lời gọi này rất dài
và bất tiện, vì trong mỗi lần gọi lớp
Data phải chỉ ra không gian tên dài của nó.
Để giải quyết vấn đề tương tự tồn tại
một câu lệnh đặc biệt use. Với sự trợ giúp của
câu lệnh này chỉ cần kết nối
lớp một lần bằng tên đầy đủ của nó, và sau đó
có thể tham chiếu đến lớp này đơn giản
bằng tên lớp. Xem ví dụ:
<?php
namespace Users;
use \Core\Admin\Data; // kết nối lớp
class Page extends Controller
{
public function __construct()
{
$data1 = new Data('1'); // gọi đơn giản bằng tên
$data2 = new Data('2'); // gọi đơn giản bằng tên
}
}
?>
Đơn giản hóa mã sau bằng cách sử dụng
use:
<?php
namespace Project;
class Test
{
public function __construct()
{
// Tạo 3 đối tượng của một lớp:
$data1 = new \Core\Users\Data('user1');
$data2 = new \Core\Users\Data('user3');
$data3 = new \Core\Users\Data('user3');
}
}
?>
Cho các lớp sau:
<?php
namespace Core\Admin;
class Controller
{
}
?>
<?php
namespace Users;
class Page extends \Core\Admin\Controller
{
}
?>
Đơn giản hóa mã kế thừa lớp, áp dụng
câu lệnh use.