Постоянный NAMESPACE_SEPARATOR

Наличие пространств имен в PHP является большим. При наличии '\', поскольку разделитель пространства имен является немного... неловким (но если существует кто-то, кто думает, что это прохладно и сексуально, я добавляю тег "напыщенная речь" к этому сообщению.;).

Так, здесь идет вопрос:

Вы используете в своем коде постоянный NAMESPACE_SEPARATOR? Как в коде ниже:

Профессионалы:

  • согласовывающийся с DIRECTORY_SEPARATOR (который все мы используем ;)
  • никакая путаница с выходом (думают о '\Foo\Bar', но '\\'. Нечто'. '\\'. 'Панель')
  • более читаемый (по моему скромному мнению),
  • который дает нам в действительности возможность записать хорошие, осведомленные о пространстве имен автопогрузчики
  • может сопротивляться другому изменению, если что-то страшное происходит (как с ol'good '::' от альфы PHP 6)
  • может скрыть uniquess '\' как оператор пространства имен на земле языка программирования от незнакомцев ;)

Недостатки:

  • "Причина DIRECTORY_SEPARATOR это, значение является зависимым платформы, разделитель пространства имен не". (как указано в http://bugs.php.net/bug.php?id=43046)
  • 19 символов вместо 1 (\) или 4 (' \\')
  • Существуют места, где Вы не можете использовать это (полные квалифицированные имена классов как переменные класса по умолчанию) т.е.:

Так, что Вы думаете?

5
задан hakre 15 June 2012 в 17:05
поделиться

1 ответ

Я не уверен, что вообще понял вашу мысль... Константы PHP не похожи на макросы препроцессора C. Вы не можете создать макрос и заменить им оператор - он просто не будет работать:

<?php
define('ADD', '+');
echo (3 ADD 5); // Parse error: syntax error, unexpected T_STRING
?>

Даже если бы он работал, какова цель? Скрывать синтаксис языка, чтобы сделать его похожим на другой язык, с которым вы лучше знакомы, - пустая трата времени, не говоря уже о том, что это усложняет работу над проектом для других программистов. Если вы считаете, что язык X выглядит круче, что ж, просто пишите X, а не PHP :)

Обновление

Использование разделителя пространства имен в местах, где он должен быть строкой (например, в автозагрузках и обратных вызовах), не вызывает особых трудностей при использовании одинарных кавычек, поскольку единственное место, где его нужно экранировать, это прямо перед кавычками или другим обратным слешем, поэтому его можно писать как есть:

$callback = 'Foo\Bar';

Все остальные варианты кажутся мне излишне сложными:

$callback = "Foo\\Bar";
$callback = 'Foo' . NAMESPACE_SEPARATOR . 'Bar';
$callback = "Foo{$namespace_separator}Bar";
6
ответ дан 18 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: