Hướng dẫn in php namespace does not affect type of code - trong không gian tên php không ảnh hưởng đến loại mã

(Php 5> = 5.3.0, Php 7, Php 8)

Show

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.

  1. 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?
  2. 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?
  3. 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?
  4. Làm thế nào để một cái tên như \my\name hoặc \name giải quyết?
  5. Làm thế nào để một cái tên như my\name giải quyết?
  6. Làm thế nào để một tên lớp không đủ tiêu chuẩn như name giải quyết?
  7. 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.

  1. 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.
  2. Không gian tên lồng nhau không được phép.
  3. 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.
  4. 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
  5. 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

$a = new \stdClass;
?>

Đ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

$a = new stdClass;
?>

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

namespace foo;
$a = new \stdClass;

function

test(\ArrayObject $parameter_type_example null) {}$a = \DirectoryIterator::CURRENT_AS_FILEINFO;// extending an internal or global class
class MyException extends \Exception {}
?>

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

\name0

\name1

\name2

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 \name5 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\name8 là \name9.

Ví dụ #5 Tên đủ điều kiện

my\name0

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\name3, thì bí danh nhập được áp dụng cho my\name3 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\name7

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

name2

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

name8

name9

name0

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.

Các kết hợp kịch bản sau đây là hợp pháp:

file1.php

name1

another.php

name2

file2.php

name3

name4

name5

Không có xung đột tên, mặc dù lớp name6 tồn tại trong không gian tên name7, 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.

name8

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ổ

name9

Tuy nhiên, thật dễ dàng để mô phỏng các không gian tên lồng nhau như vậy:

$a = new \stdClass;
?>
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

$a = new \stdClass;
?>
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ư $a = new \stdClass;
?>
2 sẽ tạo ra một thông báo giải thích rằng PHP giả định $a = new \stdClass;
?>
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

$a = new \stdClass;
?>
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

$a = new \stdClass;
?>
5

Manolachef tại Gmail Dot Com ¶

10 năm trước

$a = new \stdClass;
?>
6

$a = new \stdClass;
?>
7

$a = new \stdClass;
?>
8

Shaun tại slickdesign dot com dot au ¶

6 năm trước

$a = new \stdClass;
?>
9

$a = new stdClass;
?>
0

$a = new stdClass;
?>
1

$a = new stdClass;
?>
2

$a = new stdClass;
?>
3

Teohad tại Nospam dot gmail dot com ¶

6 năm trước

$a = new stdClass;
?>
4

$a = new stdClass;
?>
5

$a = new stdClass;
?>
6

$a = new stdClass;
?>
7

$a = new stdClass;
?>
8

Teohad tại Nospam dot gmail dot com ¶

PHPCoder ¶

$a = new stdClass;
?>
9

namespace foo;
$a = new \stdClass;
0

$a = new \stdClass;
?>
8

7 năm trước

Theing2 tại King Dot Ma ¶

namespace foo;
$a = new \stdClass;
2

namespace foo;
$a = new \stdClass;
3

$a = new \stdClass;
?>
8

4 tháng trước

okaresz ¶

namespace foo;
$a = new \stdClass;
5

namespace foo;
$a = new \stdClass;
6

$a = new \stdClass;
?>
8

Không gian tên làm gì trong PHP?

Trong thế giới PHP, các không gian tên được thiết kế để giải quyết hai vấn đề mà các tác giả của thư viện và ứng dụng gặp phải khi tạo các yếu tố mã có thể sử dụng lại như các lớp hoặc chức năng: Va chạm tên giữa mã bạn tạo và các lớp/hàm/hằng số PHP nội bộ hoặc thứ ba- Các lớp bên/chức năng/hằng số.Name collisions between code you create, and internal PHP classes/functions/constants or third-party classes/functions/constants.

Mục đích của không gian tên là gì?

Các không gian tên được sử dụng để sắp xếp mã thành các nhóm logic và để ngăn chặn các vụ va chạm tên có thể xảy ra đặc biệt là khi cơ sở mã của bạn bao gồm nhiều thư viện.Tất cả các định danh ở phạm vi không gian tên có thể nhìn thấy với nhau mà không cần trình độ.to organize code into logical groups and to prevent name collisions that can occur especially when your code base includes multiple libraries. All identifiers at namespace scope are visible to one another without qualification.

Sự khác biệt giữa sử dụng và không gian tên trong PHP là gì?

Không gian tên là để tránh các vụ va chạm tên lớp, vì vậy bạn có thể có hai tên lớp giống nhau trong hai không gian tên khác nhau. Sử dụng giống như PHP bao gồm.Vui lòng đăng nhập hoặc tạo tài khoản để tham gia vào cuộc trò chuyện này. Use is just like PHP include. Please sign in or create an account to participate in this conversation.

Tôi có thể sử dụng hai không gian tên trong PHP không?

Nhiều không gian tên cũng có thể được khai báo trong cùng một tệp.Có hai cú pháp được phép.Cú pháp này không được khuyến nghị để kết hợp các không gian tên thành một tệp.Thay vào đó, bạn nên sử dụng cú pháp thay thế.. There are two allowed syntaxes. This syntax is not recommended for combining namespaces into a single file. Instead it is recommended to use the alternate bracketed syntax.