PHP Namespaces giải quyết hai vấn đề:
1. Chúng cho phép tổ chức tốt hơn bằng cách nhóm các class làm việc cùng nhau để thực hiện một nhiệm vụ.
2. Chúng cho phép sử dụng cùng một tên cho nhiều class.
Ví dụ, bạn có một tập hợp các class dùng để xử lý dữ liệu như Save, Delete, Edit. Ở table NhanVien và SanPham, bạn đều tạo các class là Save, Delete, Edit tương tự nhau. Namespace giúp nhóm các class lại với nhau để class không bị nhầm lẫn.
Khai báo namespace
Namespace được khai báo ở đầu tập lệnh, với từ khóa namespace:
1
namespace
Html
;
Như mình đã nói ở trên, namespace phải được khai báo đầu tiên trong tập lệnh PHP. Khai báo sau đây là sai:
1
2
3
4
5
<?php
echo
“Hello World!”
;
namespace
Html
;
.
.
.
?>
Tất cả các hằng số, class, function được khai báo trong file này sẽ thuộc Html namespace.
Ví dụ
Tạo một class Table trong namespace Html:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
namespace
Html
;
class
Table
{
public
$title
=
“”
;
public
$numRows
=
0
;
public
function
message
(
)
{
echo
“<p>Table ‘{$this->title}’ has {$this->numRows} rows.</p>”
;
}
}
$table
=
new
Table
(
)
;
$table
->
title
=
“My table”
;
$table
->
numRows
=
5
;
?>
<
!
DOCTYPE
html
>
<
html
>
<
body
>
<?php
$table
->
message
(
)
;
?>
<
/
body
>
<
/
html
>
Có thể có các không gian tên lồng nhau.
Khai báo một namespace được gọi là Html bên trong một namespace được gọi là Code:
1
namespace
Code
\
Html
;
Sử dụng namespace
Để khởi tạo các class có khai báo namespace, ta cần có namespace gắn liền với nó:
1
2
$
table
=
new
Html
\
Table
(
)
$
row
=
new
Html
\
Row
(
)
;
Trường hợp nhiều class có cùng namespace, ta có thể sử dụng:
1
2
3
namespace
Html
;
$
table
=
new
Table
(
)
;
$
row
=
new
Row
(
)
;
Định danh cho một namespace
Trường hợp có nhiều class trùng tên với nhau, ta có thể khai báo như sau để tạo một định danh mới cho namespace:
1
2
use
Html
as
H
;
$
table
=
new
H
\
Table
(
)
;