Tôi luôn nghĩ mục tiêu chính của không gian tên là ngăn ngừa va chạm tên và sự mơ hồ.Cách sử dụng 'sử dụng' hoặc 'sử dụng' bằng ngôn ngữ lập trình
# 1 vấn đề cố định bởi không gian tên từ php.net:
Tên va chạm giữa mã bạn tạo ra, và nội bộ PHP lớp/chức năng/hằng số hoặc của bên thứ ba lớp/chức năng/hằng số.
Tuy nhiên, hầu hết các ngôn ngữ đều triển khai từ khóa "sử dụng" theo cách nào đó để đặt bí danh hoặc nhập không gian tên khác vào một từ khóa hiện tại. Tôi biết nó hoạt động như thế nào, nhưng tôi không hiểu tại sao chức năng này lại được sử dụng.
Không sử dụng từ khóa 'sử dụng' có hiệu quả đánh bại mục đích của không gian tên?
namespace core\utils;
class User {
public static function hello(){
return "Hello from core!";
}
}
//---------------------------------------------------
namespace core2\utils;
class User {
public static function hello(){
return "Hello from core2!";
}
}
//---------------------------------------------------
namespace core2;
//causes name collision, we now have two different classes of type 'utils\User'
use core\utils; //without this line the result is 'Hello from core2'
class Main {
public static function main(){
echo utils\User::hello();
}
}
Main::main();
//outputs Hello from core!
?>
Tôi đang thiếu điều gì đó hoặc sử dụng từ khóa 'sử dụng' thực sự không được khuyến khích?
Dù bằng cách nào, trong hoàn cảnh nào thực sự là một ý tưởng tốt để hy sinh việc đóng gói?
Tôi đã từng sử dụng, nhưng bây giờ tôi không chắc chắn khi sử dụng nên được sử dụng.
Chỉnh sửa: Được rồi, hãy để tôi nói thẳng: Nếu tôi sử dụng 'sử dụng' để lấy tên ngắn, làm thế nào tốt hơn là chỉ khai báo lớp trong không gian tên chung? Xem dưới đây:
namespace core\utils\longname {
class User {} //declare our class in some namespace
}
//------------------Other File---------------------------
namespace { //in another file import our long name ns and use the class
use core\utils\longname\User as User;
new User();
}
^lợi thế của không gian tên như thế chống lại tuyên bố này là gì:
namespace {
class User {} //declare our class in global namespace
}
//------------------Other File---------------------------
namespace { //in another file just use the class
new User();
}
Có sự khác biệt nào giữa hai?
"Sử dụng" được sử dụng bởi vì nó là cả một nỗi đau trong ass và trái với sự hiểu biết trực quan tốt để có để đánh vần tất cả mọi thứ tất cả các thời gian. –
Điều đó thực sự đúng, nhưng có vẻ như tôi đang làm tổn thương không gian tên. Ranh giới giữa sự mơ hồ và khả năng đọc ở đâu? – Webmut
Bí danh phải là dự phòng.Nhưng hiện tại là một sản phẩm phụ của không gian tên không được sử dụng cho mục đích dự định của chúng, mà là để tạo ra phân loại định danh. – mario