Пространства имен в 5.3 - доступны снапшоты

  • Автор темы Автор темы Develar
  • Дата начала Дата начала
Тестил я тему эту. Пока 1 вопрос: что за непонятки с перменными. Для них никаких неймспейсов не существует =). А еще там есть неоднозначность с константами.
 
Автор оригинала: fixxxer
они при этом даже не хотят оглянуться вокруг. :)
http://pecl.php.net/package/htscanner - уже год как есть
Конечно я про него знаю, но
1. Доставлять и настраивать пекл несколько морочнее, чем установка сразу из дистрибутива,
2. Не всегда пекловские экстеншены совместимы между собой,
3. Поддержка в пекле слабее, чем в релизе, а htscanner в alpha.
 
а тестить dev версии не надо?
Да надо конечно.. Но, к сожалению, временными ресурсами не обладаю :( Посему всегда пользуюсь только релизами.

Но за неймспейсы все равно респектище =))
 
>1. Доставлять и настраивать пекл несколько морочнее, чем установка сразу из дистрибутива

"дистрибутива" == "дистрибутива PHP" ?
но это же полная ерунда.
`pecl install extension` - всё, что надо.

>2. Не всегда пекловские экстеншены совместимы между собой,

звучит многозначительно, но лично для меня смысла никакого не несёт.
вероятно, речь идёт о какой-то конкретной проблеме?

>3. Поддержка в пекле слабее, чем в релизе, а htscanner в alpha.

вот это точно ерунда.
поддержка никак не зависит от того, где экстеншен.
плохо- и не- поддерживаемых экстеншенов достаточно и там, и там.
 
Alexandre

Я вижу в NS только плюсы. Я буду пользоваться и жду с нетерпением. И многие ждут. С таким же успехом можно спросить: "Интересно какая часть разработчиков будет пользоваться ООП????"

-~{}~ 07.11.07 23:45:

Я пока нашел неоднозначность поведения с константами. Если объявить константу define('TEST', 'GLOBAL') где-то, то эта константа видна внутри всех файлов, и неймспейсов. Я объявляю внтури неймспейса const TEST = 'LOCAL', то уже внутри неймспейса, где был вызов константы TEST, будет ссылаться на внутренню константу, перекрывая внешнюю. А внешняя доступна через ::TEST. С функциями при таком поведении генерится ошибка. Я считаю что тут надо было бы хотя бы ворнинг какой, чтобы в будущем проблем меньше было. Ну и, надеюсь, что перменные так же будут работать с неймспейсами, ато в нынешней вариации перменная, объявленная неважно где (ну в смысле глобальная, а не внутри классов или функций), видна везде и для нее как-будто не существует никаких NS.
 
Сейчас я их попробую - как-раз проект начинается... :)
 
>Я считаю что тут надо было бы хотя бы ворнинг какой, чтобы в будущем проблем меньше было.

вероятно, сначала надо понять зачем неймспейсы нужны, правда?
 
> вероятно, сначала надо понять зачем неймспейсы нужны, правда?

Я понимаю зачем. Но будут люди, которые будут юзать их не понимая. Потом за ними код разбирай и ищи ошибки.

Если внутри неймспейса делается бращение к константе, которая не объявлена внутри него, то надо написать что-то, что мол к глобальным обращайся через пустое пространство ::. Например, с функциями такая ситуация обрабатывается. И если вы делаете внутри неймспейса вызов функции, которая не объявлена внутри NS, но объявлена снаружи, то PHP говорит что так нельзя делать. Надо либо функцию объявить, либо, если это глобальная функция, обращаться к ней через ::.

Просто если обрабатываются все остальные случаи(с функциями, классами), то константы просто забыли выходит. Поэтому я и решил что забыли. Разве не так?
 
Raziel[SD]

Пространство имён (namespace) - это область определения переменных, констант, etc, ограничивающая их область видимости. Оно предназначено для локализации имен идентификаторов и предотвращения конфликтов между ними. Элементы, объявленные в одном пространстве имен, отделены от элементов, принадлежащих другому пространству имен.
 
Major
Если внутри неймспейса делается бращение к константе, которая не объявлена внутри него, то надо написать что-то, что мол к глобальным обращайся через пустое пространство ::
Это идеологически не верно. Так как пространства имен предназначены для локализации области видимости переменных(констант, функций, классов) то глобальное пространство имен должно быть видимо везде по умолчанию.
 
Автор оригинала: tony2001
`pecl install extension` - всё, что надо.
Теоретически - да, но у меня при установке PHP не ставится PEAR - вылазят какие-то ошибки.
Надо бы разобраться, но мне он нужен так редко, что не до него.

>2. Не всегда пекловские экстеншены совместимы между собой,
звучит многозначительно, но лично для меня смысла никакого не несёт.
вероятно, речь идёт о какой-то конкретной проблеме?
У меня была непонятная несовместимость APC c Memcached - апач (как и cli) вылетал на запуске когда я включал оба экстеншена.
Решил проблему заменой APC на XCache - с репортом разбираться никто не спешил, а с разработкой на С я не связан и отдебажить самому мне трудно.

>3. Поддержка в пекле слабее, чем в релизе, а htscanner в alpha.

вот это точно ерунда.
поддержка никак не зависит от того, где экстеншен.
плохо- и не- поддерживаемых экстеншенов достаточно и там, и там.
Извини за обобщение. Я думаю, что ты прав и, конечно, знаешь намного лучше :)
 
phprus

Ну в целом я согласен. Кстати, я так и не понял, переменные просто не успели добавить? Сейчас переменные видны "сквозь" все NS, если они объявлены внутри NS, то для них нет преград. Тоесть, чтобы скрыть переменную, ее надо делать статической и в класс заворачивать?

PHP:
<?
namespace test;

$var = 1; // Она будет видна без обращения через test:: и не будет доступна через test::$var

?>
 
Кто-нибудь знает, можно ли настроить Zend Studio чтобы она понимала (не подсвечивало ошибкой) ключевое слово namespace ?
 
Сейчас переменные видны "сквозь" все NS, если они объявлены внутри NS, то для них нет преград. Тоесть, чтобы скрыть переменную, ее надо делать статической и в класс заворачивать?
Если все так и останется то это будет плохо.
 
Сверху