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

Major

Новичок
Тестил я тему эту. Пока 1 вопрос: что за непонятки с перменными. Для них никаких неймспейсов не существует =). А еще там есть неоднозначность с константами.
 

grigori

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

boombick

boombick.org
а тестить dev версии не надо?
Да надо конечно.. Но, к сожалению, временными ресурсами не обладаю :( Посему всегда пользуюсь только релизами.

Но за неймспейсы все равно респектище =))
 

tony2001

TeaM PHPClub
>1. Доставлять и настраивать пекл несколько морочнее, чем установка сразу из дистрибутива

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

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

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

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

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

Major

Новичок
Alexandre

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

-~{}~ 07.11.07 23:45:

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Сейчас я их попробую - как-раз проект начинается... :)
 

tony2001

TeaM PHPClub
>Я считаю что тут надо было бы хотя бы ворнинг какой, чтобы в будущем проблем меньше было.

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

Major

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

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

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

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

Major

Новичок
Raziel[SD]

Пространство имён (namespace) - это область определения переменных, констант, etc, ограничивающая их область видимости. Оно предназначено для локализации имен идентификаторов и предотвращения конфликтов между ними. Элементы, объявленные в одном пространстве имен, отделены от элементов, принадлежащих другому пространству имен.
 

phprus

Moderator
Команда форума
Major
Если внутри неймспейса делается бращение к константе, которая не объявлена внутри него, то надо написать что-то, что мол к глобальным обращайся через пустое пространство ::
Это идеологически не верно. Так как пространства имен предназначены для локализации области видимости переменных(констант, функций, классов) то глобальное пространство имен должно быть видимо везде по умолчанию.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: tony2001
`pecl install extension` - всё, что надо.
Теоретически - да, но у меня при установке PHP не ставится PEAR - вылазят какие-то ошибки.
Надо бы разобраться, но мне он нужен так редко, что не до него.

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

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

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

Major

Новичок
phprus

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

PHP:
<?
namespace test;

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

?>
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Кто-нибудь знает, можно ли настроить Zend Studio чтобы она понимала (не подсвечивало ошибкой) ключевое слово namespace ?
 

phprus

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

fixxxer

К.О.
Партнер клуба
не надо пользоваться глбальными переменными :)
 
Сверху