[Php 5> = 5.3.0, Php 7, Php 8]
Câu hỏi thường gặp này được chia thành hai phần: câu hỏi phổ biến và một số chi tiết cụ thể về việc thực hiện hữu ích để hiểu đầy đủ.
Đầu tiên, những câu hỏi phổ biến.
- Nếu tôi không sử dụng không gian tên, tôi có nên quan tâm đến bất kỳ điều gì trong số này không?
- Làm cách nào để sử dụng các lớp nội bộ hoặc toàn cầu trong không gian tên?
- Làm thế nào để tôi sử dụng các chức năng các lớp không gian tên hoặc hằng số trong không gian tên của riêng chúng?
- Làm thế nào để một cái tên như
\my\name
hoặc\name
giải quyết? - Làm thế nào để một cái tên như
my\name
giải quyết? - Làm thế nào để một tên lớp không đủ tiêu chuẩn như
name
giải quyết? - Làm thế nào để một tên hàm không đủ tiêu chuẩn hoặc tên hằng số không đủ tiêu chuẩn như
name
giải quyết?
Có một vài chi tiết triển khai về việc triển khai không gian tên hữu ích để hiểu.
- Nhập tên không được xung đột với các lớp được xác định trong cùng một tệp.
- Không gian tên lồng nhau không được phép.
- Tên không gian tên động [định danh được trích dẫn] nên thoát khỏi dấu gạch chéo ngược.
- Các hằng số không được xác định được tham chiếu bằng cách sử dụng bất kỳ dấu gạch chéo ngược nào với lỗi nghiêm trọng
- Không thể ghi đè các hằng số đặc biệt null, true, false, zend_thread_safe hoặc zend_debug_build
Nếu tôi không sử dụng không gian tên, tôi có nên quan tâm đến bất kỳ điều gì trong số này không?
Không. Không gian tên không ảnh hưởng đến bất kỳ mã hiện có nào theo bất kỳ cách nào hoặc bất kỳ mã chưa được viết nào không chứa các không gian tên. Bạn có thể viết mã này nếu bạn muốn:
Ví dụ #1 truy cập các lớp toàn cầu bên ngoài không gian tên
Điều này có chức năng tương đương với:
Ví dụ #2 truy cập các lớp toàn cầu bên ngoài không gian tên
Làm cách nào để sử dụng các lớp nội bộ hoặc toàn cầu trong không gian tên?
Ví dụ #3 truy cập các lớp nội bộ trong các không gian tên
Làm cách nào để sử dụng các lớp, chức năng hoặc hằng số không gian tên trong không gian tên của riêng họ?
Ví dụ #4 truy cập các lớp, chức năng hoặc hằng số nội bộ trong các không gian tên
\name
0
\name
1
\name
2 Làm thế nào để một cái tên như \my\name
hoặc \name
giải quyết?
Những cái tên bắt đầu bằng một \name
5 luôn giải quyết cho những gì chúng trông như thế nào, vì vậy \my\name
trên thực tế là my\name
và \name
8 là \name
9.
Ví dụ #5 Tên đủ điều kiện
my\name
0
Làm thế nào để một cái tên như my\name
giải quyết?
Các tên có chứa dấu gạch chéo ngược nhưng không bắt đầu với một dấu gạch chéo ngược như my\name
có thể được giải quyết theo 2 cách khác nhau.
Nếu có một tuyên bố nhập khẩu bí danh khác tên thành my\name
3, thì bí danh nhập được áp dụng cho my\name
3 trong my\name
.
Mặt khác, tên không gian tên hiện tại được chuẩn bị đến my\name
.
Ví dụ #6 Tên đủ điều kiện
my\name
7
Làm thế nào để một tên lớp không đủ tiêu chuẩn như name
giải quyết?
Tên lớp không chứa dấu gạch chéo ngược như name
có thể được giải quyết theo 2 cách khác nhau.
Nếu có một tuyên bố nhập khẩu bí danh khác tên thành name
, thì bí danh nhập được áp dụng.
Mặt khác, tên không gian tên hiện tại được chuẩn bị đến name
.
Ví dụ #7 Tên lớp không đủ tiêu chuẩn
name
2
Làm thế nào để một tên hàm không đủ tiêu chuẩn hoặc tên hằng số không đủ tiêu chuẩn như name
giải quyết?
Hàm hoặc tên không đổi không chứa dấu gạch chéo ngược như name
có thể được giải quyết theo 2 cách khác nhau.
Đầu tiên, tên không gian tên hiện tại được chuẩn bị cho name
.
Cuối cùng, nếu hằng hoặc hàm name
không tồn tại trong không gian tên hiện tại, hằng số hoặc hàm toàn cầu name
được sử dụng nếu nó tồn tại.
Ví dụ #8 Hàm không đủ tiêu chuẩn hoặc tên không đổi
name
8
name
9
name
0Nhập tên không được xung đột với các lớp được xác định trong cùng một tệp.
Các kết hợp kịch bản sau đây là hợp pháp:
file1.php
name
1
another.php
name
2
file2.php
name
3
name
4
name
5 Không có xung đột tên, mặc dù lớp name
6 tồn tại trong không gian tên name
7, bởi vì định nghĩa MyClass nằm trong một tệp riêng biệt. Tuy nhiên, ví dụ tiếp theo gây ra lỗi nghiêm trọng đối với xung đột tên vì MyClass được xác định trong cùng một tệp với câu lệnh sử dụng.
name
8
Không gian tên lồng nhau không được phép.
PHP không cho phép không gian tên làm tổ
name
9
Tuy nhiên, thật dễ dàng để mô phỏng các không gian tên lồng nhau như vậy:
0
Tên không gian tên động [định danh được trích dẫn] sẽ thoát khỏi dấu gạch chéo ngược
Điều rất quan trọng là nhận ra rằng vì dấu gạch chéo ngược được sử dụng như một ký tự thoát trong chuỗi, nên nó phải luôn được nhân đôi khi được sử dụng bên trong một chuỗi. Nếu không, có nguy cơ hậu quả không lường trước được:
Ví dụ #9 Nguy hiểm của việc sử dụng tên đặt tên bên trong chuỗi được trích xuất kép
1
Bên trong một chuỗi được trích xuất đơn, chuỗi thoát hiểm trở nên an toàn hơn nhiều để sử dụng, nhưng vẫn được khuyến nghị thực hành để thoát khỏi các dấu gạch chéo ngược trong tất cả các chuỗi như một thực tiễn tốt nhất.
Các hằng số không được xác định được tham chiếu bằng cách sử dụng bất kỳ dấu gạch chéo ngược nào với lỗi nghiêm trọng
Bất kỳ hằng số không xác định nào không đủ tiêu chuẩn như
2 sẽ tạo ra một thông báo giải thích rằng PHP giả định
2 là giá trị của hằng số. Bất kỳ không đổi, đủ điều kiện hoặc đủ điều kiện, có chứa dấu gạch chéo ngược sẽ tạo ra một lỗi nghiêm trọng nếu không tìm thấy.
Ví dụ #10 hằng số không xác định
4
Không thể ghi đè các hằng số đặc biệt null, true, false, zend_thread_safe hoặc zend_debug_build
Bất kỳ nỗ lực nào để xác định hằng số theo tên là một hằng số đặc biệt, tích hợp trong một lỗi nghiêm trọng
Ví dụ #11 hằng số không xác định
5
Manolachef tại Gmail Dot Com ¶ ¶
10 năm trước
6
7
8Shaun tại slickdesign dot com dot au ¶ ¶
6 năm trước
9
0
1
2
3Teohad tại Nospam dot gmail dot com ¶ ¶
6 năm trước
4
5
6
7
8Teohad tại Nospam dot gmail dot com ¶ ¶
PHPCoder ¶
9
8
7 năm trước ¶
Theing2 tại King Dot Ma ¶
8
4 tháng trước ¶
okaresz ¶
8