Бэкслеш - теперь разделитель для неймспейсов

Статус
В этой теме нельзя размещать новые ответы.

ustas

Элекомист №1
fixxxer
а что можно сделать? Акт выражения недовольства на форуме php.net?
 

Krishna

Продался Java
fixxxer
Там каменты делать можно к тикетам? )
Можно сделать один, но к нему собрать подписи )
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А вот обратный слеш мне бы понравился. Было бы похоже на Xpath и иже с ними =)
 

Krishna

Продался Java
флоппик
В пхп и так куча всего намешано. Не стоит бодяжить явасишный синтаксис такими инновациями.

-~{}~ 27.10.08 12:27:

Модераторы, создайте плиз голосовалку - давайте определимся для начала сколько народу у нас поддерживает и сколько против. И если подавляющее большинство против \ - будем решать что делать )))
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Не, в принципе, использование слеша для отображения контекста вложенности используется давно. И оно, в принципе, уместно. И уж всяко лучше «^^» и «**»

Еще можно «~» заюзать. =)
 

fixxxer

К.О.
Партнер клуба
так, ну давайте конструктивно.

откуда взялся идиотский бэкслеш и какие проблемы с ::, и какие я вижу варианты.

http://wiki.php.net/rfc/namespaceissues

пункт первый:
"Conflict between namespaced functions and static class methods"

варианты.

первый, который точно делать не будут, но который мне нравится - отказаться нахрен от неймспейсов для функций, пускай все живут в global scope. вообще использовать неймспейсы _только_ для классов. говнокодерам неймспейсы не нужны, у остальных и так весь код находится в классах.

второй - ладно, пусть мы хотим неймспейсы для всего, но зачем миксить классы и функции с одинаковыми именами? достаточно задокументировать такое поведение. если хочется явно различать - лучше изменить lookup order с существующего на 1)static method 2)namespace::function и ввести скобочные уточнения, например:

PHP:
// ns_func.php
namespace Foo;
function bar() { echo "function bar()\n";}
// run.php
include "ns_func.php";
class Foo {
   static function bar() { echo "method Foo::bar()\n";}
}

// calls method Foo::bar()
Foo::bar();

// calls ns Foo::func bar()
(Foo::)bar();
UPD
второй пункт Resolving access to internal classes я пропустил т.к. там уже предложено хорошее решение
 

phprus

Moderator
Команда форума
флоппик
Есть широко используемое обозначение ::, которое к тому-же применяется в языках с похожим синтаксисом типа С++. Так что необходимость придумывать что-то новое в этой области это ИМХО маразм.
 

zerkms

TDD infected
Команда форума
fixxxer
второй вариант хороший
хотя, в принципе, даже выбрасывание фатал еррора в случае неопределённости - было бы вполне выходом
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Есть широко используемое обозначение ::, которое к тому-же применяется в языках с похожим синтаксисом типа С++
основная проблема в том, что он уже заюзан под статику. Думать надо было еще тогда.
Мне тоже нравится второй вариант, что бы скобками можно было расставить приоритеты поиска?
 

ustas

Элекомист №1
следущим ходом будет компиляция наверно, ведь явно избавляются от неоднозначности
но :> было бы неплохо. хотя у меня и \над enter и такая большая, как раз под мизинец
 

phprus

Moderator
Команда форума
fixxxer
ИМХО второй вариант более предпочтительный, так как функции тоже иногда используются. Правда я за то, чтобы в случае неопределенного поведения кидать что-то типа ошибки, так как если программист допускает то, что у него имена на столько совпадают, то это значит что проблемы где-то в стратегии выбора имен.
 

Major

Новичок
Млин, млин, млин. НУ чо за ёмаё опять? Че за бэкслеши? Ерунду какую-то опять нагоордили. Я понимаю там ~ взяли бы. Но бэклсешь...

Терь понятно, почему обещали в конце октября показать новую версию и не показали. С неймспейсами запарились.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
проблемы где-то в стратегии выбора имен.
тогда неймспейсы не нужны вообще.
Кроме того, ты не учитываешь что код может быть чужой, подключаемый к проекту.

Кстати, а будет что то вроде include ... in namespace ? Что б существующий старый код можно было пихать в неймспейсы?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
хм. хотелось бы вставить
в с++ есть понятие using namespace Foo;

что делает автоматом, его текущим для области видимости, к сожалению нигде этого не увидел в реализации php ns (может не внимательно смотрел).

далее..

в чем может быть конфликт (может я чего недопонимаю )

namespace Foo
{
function Foo()
{
echo "Foo::Foo();";
}
class Foo
{
public static function Foo()
{
echo "Foo::Foo:Foo();";
}
}
}

Foo::Foo(); - ф-я ns
Foo::Foo - класс ns
Foo::Foo::Foo(); - стат. ф-я класса ns
use Foo;
Foo::Foo() - стат. ф-я класса
 

phprus

Moderator
Команда форума
флоппик
тогда неймспейсы не нужны вообще.
Кроме того, ты не учитываешь что код может быть чужой, подключаемый к проекту.
Если все на столько плохо, что полностью совпадают имена нэймспыйсов, классов, функций - то я такого еще нигде не видел. Может быть мне конечно очень повезло, но мне кажется что в этом сильно виноваты сами разработчики.
Даже простая упаковка всего проекта в нэймспэйс ProjectName (или что-то подобное) должна спасти от проблемы совпадения имен в своем и стороннем коде. И такое решение я видел довольно часто.
 

Crys

Двинутый новичок
По-моему с точки зрения юзабилити кода - бэкслэш вполне нормально выглядит. Наверное мне так кажется, потому что мало опыта с другими языками программирования, но для меня бэкслеш как разделитель будет более понятным, нежели "::" или ":"
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху