[PATCH] Namespace Patch, Beta 1

su1d

Старожил PHPClubа
я дома с CVS-HEAD (РНР6) работаю, для которого патча ещё нет.
 

tony2001

TeaM PHPClub
>INTERNALLY!
ты меня с толку сбиваешь: а что тогда НЕ internally, по-твоему?
\ был выбран именно потому, что все остальные символы уже заняты :) занят в тернарном операторе и патч от Jessie с тернарным оператором имеет соотв-щие проблемы).

>например, в ЗендДвижке классы с обычными именами и с юникодными хранятся в разных массивах...
нет, всё в одном.
EG(class_table) - тут все, вне зависимости от типа строки-названия.
см. zend_u_lookup_class_ex(), Zend/zend_execute_API.c:968
 

su1d

Старожил PHPClubа
хм, они что, правда решили делать NS\sub_NS\Class::func() ?
да они офигели!
чем :: плох?
конфликты между именами разрешаются очень легко запретом на определение класса и функции с одним и тем же именем внутри одного namespace'а (может быть, за исключением global, или как там назовут отсутствие namespace'a, чтобы не порвать ВС).

хм, тогда почему в zend.c есть такое:
static HashTable *global_function_table = NULL;
static HashTable *global_class_table = NULL;
static HashTable *global_constants_table = NULL;
static HashTable *global_auto_globals_table = NULL;
static HashTable *global_u_function_table = NULL;
static HashTable *global_u_class_table = NULL;
static HashTable *global_u_constants_table = NULL;
static HashTable *global_u_auto_globals_table = NULL;

-~{}~ 10.12.05 23:58:

опять же, в приведённом примере неймспейсов:
PHP:
import M1 as M2;
echo M2::$var;
echo M2::c;
echo M2::func();
echo M2::C::func();
var_dump(new M2::C);
 

tony2001

TeaM PHPClub
>да они офигели!
обоснуй.

>чем :: плох?
тем, что занят?
как отличить статический вызов от вызова функции из неймспейса?

>конфликты между именами разрешаются очень легко запретом на определение
>класса и функции с одним и тем же именем внутри одного namespace'а

ха.ха.ха.
а теперь придумай к этому хотя бы одно логическое объяснение.

и чем, кстати, плох \ ?

-~{}~ 11.12.05 02:19:

echo M2::$var; - это вывод статической переменной
echo M2::c; - а это вывод class constant
echo M2::func(); - а это статический вызов метода

это именно то, что характеризуется словом "confusing".
 

tony2001

TeaM PHPClub
\ используется для экранирования только в строках (типа "строка").
зрительно отличить echo M2\$var; от echo "M2\$var"; очевидно проще, чем M::func(); от M::func();, ибо во втором случае разницы НЕТ =)
 

itprog

Cruftsman
тогда уж надо было '~>' :)

а с другой стороны, если пробелы поставить, то не так уж и плохо:
PHP:
echo M2 \ $var;
echo M2 \ c;
echo M2 \ func();
echo M2 \ C::func();
только деление напоминает
а куда пропадает \ ?)
 

tony2001

TeaM PHPClub
хм..
кто-нибудь кроме меня здесь собирается обосновывать своё мнение?

-~{}~ 11.12.05 02:47:

itprog
неоригинально.
весь список предложенных смайликов и их авторов-клоунов см. в internals.
 

tony2001

TeaM PHPClub
это первое утвердительное предложение от тебя.
все предыдущие были вопросительными.
какое из них обосновывает что?
 

tony2001

TeaM PHPClub
судя по всему, да.

-~{}~ 11.12.05 03:27:

Большая просьба всем желающим поговорить на эту тему сначала прочесть обсуждение в internals.

См. темы:
- Namespaces: Technical proposal
- Desired namespace behavoir
- namespace separator ideas
- namespace separator poll, update
- Basic Namespace Requirements

Спасибо.
 
Сверху