Оператор пространства имен... что это такое?
Может кто-нибудь объяснить мне, что именно так плохо в использовании обратной косой черты в качестве оператора пространства имен? Я прочитал много смешных замечаний об этом. Один StackOverflower даже сказал, что он отказался от PHP из-за этого.
Да, я знаю, что обратная косая черта имеет особое значение как символ escape внутри строк, но на самом деле это не хуже, чем использование ->
, или точка .
, как на многих других языках.
Это напоминает мне все насмешки над Nintendo, когда они объявили имя Wii. Каждый делает большую суету, а затем, когда ее выходят, и вы привыкли к ней, никто не заботится, и они двигаются дальше.
Итак, пожалуйста, просветите меня. Что в этом плохого? Что бы вы предложили вместо этого?
Ответы
Ответ 1
Что плохого в этом: Вы можете обнаружить ошибку в следующем коде?
if(class_exists("namespace1\namespace2\myClass"))
echo "This will never be true";
Что бы я предложил: К сожалению, '\' - единственный единственный доступный символ. Если бы PHP6 был моим проектом, я бы заменил все побитовые операторы (^, &, |, ~) ключевыми словами (видя, что они так мало используются) и используйте '|' как разделитель пространства имен. На самом деле я бы предложил намного более простые синтаксические изменения, чтобы PHP легче читать и писать, но проще просто использовать Python...
Ответ 2
Проблема заключается в том, что он является символом escape почти в любом другом контексте. Это означает, что люди будут непреднамеренно испортить его, но это также затрудняет чтение, потому что ваши глаза настроены на то, чтобы читать обратную косую черту как метасимвол, а не просто другой символ.
Я бы предпочел три двоеточия, которые на самом деле были предложены в какой-то момент.
Ответ 3
Кроме того, если бы я хотел, чтобы язык, который заново закрепил синтаксис, не имел особого основания, я бы использовал Ruby.
Ответ 4
Ну, есть и другие проблемы при использовании "\" в качестве пространства имен.
- Это символ побега. если ты
должны использовать \in "string" и \in
"Строка". Я чувствую, что кто-
с ним в какой-то точке. Рано или поздно.
escap char поймает вас.
- '\' не очень хорошо расположен на каждой клавиатуре. На моей клавиатуре я должен использовать комбинацию клавиш, которые не очень близки друг к другу, а иногда просто боль. Хотя это не так плохо, как "^". Другими словами, будет невозможно свободно писать код, который должен получить доступ к пространству имен на определенной раскладке.
- Помню, когда они голосовали и как абсурдны результаты. Они выбрали его, потому что он был проще другого char и нуждался в меньшем наборе текста. Честно говоря, все зависит от раскладки клавиатуры.
Вот и вся причина, по которой я могу найти, почему плохо использовать символ escape.
Честно говоря, я все еще жду языка, который создаст свои собственные символы unicode. Таким образом, это даст гораздо большую гибкость, с которой оператор может переопределить. Скажем, в С++ вы могли бы написать что-то вроде.
bool operator ≤ (Dog dog);
//and then do this
if(myDog ≤ thisDog){
}
//Seems useful?
bool operator ≅ thisDog){
// this wouldn't check for equality
// but for something close to it
}
Возможность использовать наш собственный произвольный оператор имеет гораздо больше смысла, чем использование + для группировки вещей... "∪" будет иметь больший смысл... И если вы хотите получить пересечение только вы "∩", а затем люди может сказать.. "что, если у нас нет этих char в нашем шрифте?" Я могу ответить только: "Найти шрифт, который есть у них!!!!"
Ответ 5
Официальные документы RFC и подтверждающие документы можно найти на
Они включают журнал IRC о процессе принятия решений.
Цитата раздела "Проблемы"
-
\
очень похож на /
и легко случайно переворачивается, особенно для пользователей unix. -
\
используется для экранирования - внутри строки имя пространства имен становится
\\like\\this
или мы можем получить странные символы. Сначала это может смущать пользователей. - весь существующий код с именами должен быть почти переписан, простой поиск/замена
::
невозможен. - патч касается большого количества движка и потребует тщательного тестирования битвы.
- для многих,
\this\way
сначала будет выглядеть странно.
Любое упоминание, которое вы упомянули, вероятно, связано с вышеупомянутым или личным мнением по "причинам". Я, например, считаю их довольно уродливыми, чтобы читать и громоздко писать, особенно в строках, где мне приходится использовать двойную обратную косую черту. Но опять же, я привык к этому, тем чаще я их использую.
Ответ 6
допустим следующее пространство имен:
jp\nintendo\rvl\testing
Вы заметили ошибки?
фактическое (внутреннее) пространство имен, скорее всего, примерно так:
jp
intendo
vl esting
Решение этого - всегда использовать две обратные слэши в качестве разделителя пространства имен, аналогичные тому, как мы используем это в именах файлов Windows.
используя две обратные косые черты, полностью повреждает, так как это сама escape-последовательность, которая расширяется на один единственный обратный слэз буквального выражения, который является фактическим разделителем пространства имен.
теперь, если мы используем
jp\\nintendo\\rvl\\testing
в качестве пространства имен (используя 2 обратных слэша в качестве разделителя), фактическое (внутреннее) пространство имен становится: jp\nintendo\rvl\testing
Ответ 7
Реальный вопрос в том, почему они просто не выразили его как /? Я лично ненавижу \, потому что это символ побега..., который закручивает все для меня!