Khi bạn định nghĩa một hàm trong một không gian tên,Gọi một hàm PHP được định nghĩa trong namespace khác mà không tiền tố
namespace foo {
function bar() { echo "foo!\n"; }
class MyClass { }
}
bạn phải xác định không gian tên khi gọi nó từ một (hoặc toàn cầu) namespace:
bar(); // call to undefined function \bar()
foo\bar(); // ok
với các lớp, bạn có thể sử dụng các "sử dụng" tuyên bố có hiệu quả nhập khẩu một lớp thành các namespace hiện tại [Edit:. tôi nghĩ bạn có thể "sử dụng foo" để có được các lớp học, nhưng dường như không]
use foo\MyClass as MyClass;
new MyClass(); // ok, instantiates foo\MyClass
nhưng điều này không làm việc với chức năng [và sẽ trở nên cồng kềnh được bao nhiêu có]:
use foo\bar as bar;
bar(); // call to undefined function \bar()
Bạn có thể bí danh không gian tên để làm cho tiền tố ngắn hơn để gõ,
use foo as f; // more useful if "foo" were much longer or nested
f\bar(); // ok
nhưng có cách nào để loại bỏ tiền tố hoàn toàn không?
Thông tin cơ bản: Tôi đang làm việc trên thư viện kết hợp Hamcrest xác định rất nhiều chức năng của nhà máy và nhiều trong số chúng được thiết kế để lồng nhau. Có tiền tố không gian tên thực sự giết chết khả năng đọc của các biểu thức. Hãy so sánh
assertThat($names,
is(anArray(
equalTo('Alice'),
startsWith('Bob'),
anything(),
hasLength(atLeast(12))
)));
để
use Hamcrest as h;
h\assertThat($names,
h\is(h\anArray(
h\equalTo('Alice'),
h\startsWith('Bob'),
h\anything(),
h\hasLength(h\atLeast(12))
)));
Tôi vừa xây dựng 5.6.0-dev trên các cửa sổ và dùng thử.Dường như làm việc tuyệt vời, mặc dù bạn phải nhập từng chức năng riêng lẻ. – b01
Đây là câu trả lời đúng cho câu hỏi này. – user3640967