Подтвердить что ты не робот

Оператор пространства имен... что это такое?

Может кто-нибудь объяснить мне, что именно так плохо в использовании обратной косой черты в качестве оператора пространства имен? Я прочитал много смешных замечаний об этом. Один StackOverflower даже сказал, что он отказался от PHP из-за этого.

Да, я знаю, что обратная косая черта имеет особое значение как символ escape внутри строк, но на самом деле это не хуже, чем использование ->, или точка ., как на многих других языках.

Это напоминает мне все насмешки над Nintendo, когда они объявили имя Wii. Каждый делает большую суету, а затем, когда ее выходят, и вы привыкли к ней, никто не заботится, и они двигаются дальше.

Итак, пожалуйста, просветите меня. Что в этом плохого? Что бы вы предложили вместо этого?

4b9b3361

Ответ 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

Реальный вопрос в том, почему они просто не выразили его как /? Я лично ненавижу \, потому что это символ побега..., который закручивает все для меня!