Nếu bạn sử dụng:
$obj = new ArrayObject();
nó có nghĩa là ArrayObject được định nghĩa trong namespace hiện hành. Bạn có thể sử dụng cú pháp này khi bạn đang ở trong không gian tên chung (không có vùng tên được xác định trong phạm vi hiện tại) hoặc nếu ArrayObject được định nghĩa trong cùng một không gian tên như phạm vi hiện tại (ví dụ Foo\Bar
).
Và nếu bạn sử dụng:
$obj = new \ArrayObject();
nó có nghĩa là ArrayObject được định nghĩa trong namespace toàn cầu.
Trong ví dụ của bạn, bạn có thể có mã như trong hình:
namespace Foo\Bar;
$obj = new ArrayObject();
Nó sẽ không làm việc vì bạn chưa xác định ArrayObject
trong Foo\Bar
namespace.
Đoạn mã trên là giống như:
namespace Foo\Bar;
$obj = new \Foo\Bar\ArrayObject();
Và nếu ArrayObject
được định nghĩa trong namespace toàn cục (như có thể trong trường hợp của bạn), bạn cần phải sử dụng mã:
namespace Foo\Bar;
$obj = new \ArrayObject();
để giọng đó ArrayObject không phải là được xác định trong không gian tên Foo\Bar
;
Một điều nữa - nếu bạn sử dụng ArrayObject ở nhiều nơi trong không gian tên hiện tại của bạn, có thể sẽ không thuận tiện khi thêm mỗi lần gạch chéo ngược hàng đầu. Đó là lý do tại sao bạn có thể nhập không gian tên, do đó bạn có thể sử dụng cú pháp dễ dàng hơn:
namespace Foo\Bar;
use ArrayObject;
$obj = new ArrayObject();
Như bạn thấy use ArrayObject;
đã được bổ sung trước khi tạo đối tượng nhập khẩu ArrayObject từ namespace toàn cầu. Sử dụng use
bạn không cần phải thêm (và bạn không nên) thêm hàng đầu xuyệc ngược tuy nhiên nó hoạt động giống như nó đã use \ArrayObject;
để mã ở trên là tương đương logic để:
namespace Foo\Bar;
use \ArrayObject;
$obj = new ArrayObject();
tuy nhiên
như tôi đã nói xuyệc ngược hàng đầu trong không nên sử dụng các không gian tên nhập. Trích dẫn sử dụng PHP cho điều đó:
Note that for namespaced names (fully qualified namespace names containing namespace separator, such as Foo\Bar as opposed to global names that do not, such as FooBar), the leading backslash is unnecessary and not recommended, as import names must be fully qualified, and are not processed relative to the current namespace.