Я всегда считал, что главная цель пространства имен заключается в предотвращении столкновения имен и двусмысленности.Использование «использования» или «использования» в языках программирования
# 1 проблема фиксируется пространствами имен из php.net:
столкновения Имя между кодом вы создаете, и внутренний PHP классы/функции/константами или третьей стороной классов/функций/констант.
Однако большинство языков реализует ключевое слово «use» в некотором роде для псевдонима или импортирует другое пространство имен в текущее. Я знаю, как это работает, но я не понимаю, почему такая функциональность когда-либо используется.
Не использует ключевое слово 'use' эффективно, чтобы победить цель пространства имен?
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!
?>
Я что-то упустил или использует слова «использовать», по-настоящему, в целом, обескуражен?
В любом случае, при каких обстоятельствах это действительно хорошая идея пожертвовать инкапсуляцией?
Я использовал для использования, но теперь я не уверен, когда нужно использовать.
Редактировать: Хорошо, позвольте мне понять это: если я использую 'use' для получения короткого имени, как это лучше, чем просто объявление класса в глобальном пространстве имен? Смотрите ниже:
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();
}
^Что такое преимущество, как, что разделяет пространства имен против этой декларации:
namespace {
class User {} //declare our class in global namespace
}
//------------------Other File---------------------------
namespace { //in another file just use the class
new User();
}
Есть ли разница вообще между ними?
«Использование» используется, потому что это и боль в заднице, и вопреки хорошему визуальному пониманию, чтобы все время прописывать все. –
Это действительно так, но мне кажется, что у меня болит пространство имен. Где граница между двусмысленностью и удобочитаемостью? – Webmut
Псевдонимы должны быть излишними.Но в настоящее время это побочный продукт пространств имен, которые не используются по назначению, а скорее для создания таксономий идентификаторов. – mario