PHP

индекс
206,76

Object-oriented PHP

Здравствуйте. Хочу презентовать хабрасообществу альфа-версию новой open-source библиотеки на PHP для работы с примитивами(string, integer, float и array) как с объектами.

Под катом — короткое описание, ссылка на гуглокод, описание целей и планов.

Сразу скажу огромное спасибо greedykid, который помог мне в отлавливании огромного количества багов и покрытии юнит-тестами на 80%. Думаю, если вам понравилась библиотека, он заслужил кармы не меньше, чем я.

Мысли вслух


При всей моей любви к пхп никогда не понимал слегка наплевательского и грубого отношения его разработчкиов к дизайну.
В одном месте они плюют на обратную совместимость и делают непонятно что, в другом — даже не стараются ввести какие-то стандарты кодирование (ну вот, например, почему вместе с неймспейсами не ввести бы \array\* и \string\* функции, а старые со временем объявить как deprecated?)
Еще один пример наплевательского отношения — класс Array_Object, который просто поражает своей скудностью. Ну если уже взялись сделать, то почему бы не сделать серьёзно и изящно?

Цели


Цели данной обёртки, в отличии от большинства обёрток подобного типа — не демонстрация возможностей, а полноценное использование в рабочих проектах, используя все преимущества, которые даёт нам такой подход — полноценный TypeHinting, наследование и т.д.
Также, была цель максимально облагородить ужасные названия функций и непоследовательность методов. Была попытка внести стиль именования и порядка аргументов методов.
Некоторые методы, по моему мнению, использовать стало намного проще (очевиднее), большинство методов использовать субъективно приятнее, чем встроенные функции.
Хотелось банально добавить изящества грубому php-core. И в основном, где язык не стал преградой, это получилось прекрасно

Нюансы


В отличии от большинства подобных библиотек — данная библиотека отлично работает сама с собой. То есть, например, Map будет считать одним значением что new String(«abc»), что «abc». То есть $map[«key»] и $map[new String(«key»)] ­— равносильны.
Так как это объекты — все значения передаются по ссылке. Со всеми вытекающими.
Кое-где мы уперлись в ограничения php. Например, при использвании foreach ($map as $key => $value) $key возвращается примитивным значением, а не объектом, потому рекомендуется использовать альтернативный, не менее красивый синтаксис: while($map->each($key, $value)) {} или $map->loop(function ($key, $value) {}), который можно использовать не выходя из цепочки вызовов.

Планы и надежды


Надеюсь, что многим понравится эта библиотека. Кто-то захочет быть просто пользователем, кто-то — пользователем + активным баг-репортером.
И, естественно, надеюсь на то, что найдутся желающие принять участие в разработке проекта. Надеюсь на скорый выпуск более-менее стабильной версии
После этого хотелось бы видеть расширение на Си, соответствующее по интерфейсам этой либе. Это будет вообще отлично. На небольших проектах можно использовать пхп-код, зная, что если проект разрастётся и станет большим достаточно будет установить это расширение и потери производительности от этой обёртки не будет. Имхо, это будет хороший толчок.
А там, как знать, может быть, лет через восемь в Васюках состоится первый в истории мироздания междупланетный шахматный конгресс!

Пример кода


<?
$map
    
->clear(function ($key$val) {
        
// Удалим все элементы, где ключ равен значению
        
return !$key->equals($val);
    })
    ->
join(' '// String
    
->replace(',''зпт')
    ->
pregReplace('/([0-9]+)/', function ($m) {
            return 
"!$m[]!"// Some string with number(e.g. !12345!), is here
    
})
    ->
changeCase(Str::TITLEStr::UP_FORCED)
    ->
insert('[вставлено]'5)
    ->
length() // Number
    
->multiply(4)
    ->
add(69, new Number(15))
    ->
divided(5)
    ->
sum(Number::EVEN)
    ->
dump() // (Number) 1062.51
    
->root(4)
    ->
round(3// Just 3 symbols after dot
    
->dump() // (Number) 5.709
    
->round(Number::UP// round to up (ceil)
    
->hex('15abbf')
    ->
toString() // String ('1420223')
    
->hash() // 'md5' as default
    
->dump(); // (String) '0d1b1558224c8f3b125cd905c378c9f7'

// Смотрите «KurrencyKonverter.php» в примерах
$uah = new KurrencyKonverter (500); // KurrencyKonverter extends Number
// Сколько долларов у нас будет, если мы купим их в Украине за 500 гривень
echo $uah
    
->copy()
    ->
convert('Currency.Ua.Sell''UAH''USD')
    ->
toString(2); // 63,02
// Сколько долларов у нас будет, если мы купим в Украине за 500 гривень рубли, а потом в России за эти же рубли - доллары
echo $uah
    
->convert('Currency.Ua.Sell''UAH''RUR')
    ->
convert('Currency.Ru'     'RUR''USD')
    ->
toString(2); // 44,77

Подробнее — на гуглокоде. Рекомендую посмотреть примеры — там можно найти много интересного)

Предупреждение


Предсказуеумые и унылые желающие крикнуть «Зачем изобретать велосипед?», «ООП ради ООП» и «КГ/АМ» заранее посланы матом
Любители покричать о спичечной оптимизации посланы изучать Ассемблер
Принимаю восторженные отзывы и конструктивную критику :)

Ссылки


Обсуждение первой alpha-версии на php.ru

Проект на гуглокоде



Примечания


Принимаются как багрепорты, так и предложения. Рекомендую почитать тему с обсуждением на форуме php.ru — там можно узнать много интересного про возможности библиотеки. Там же можно заметить, что интересные приложения достаточно быстро воплощаются в жизнь.
Желание помочь в написании кода — приветствуется)
Естественно, пока возможны баги. Но на то она и альфа-версия)
Лицензия — LGPL

пс. По ходу статью могу редактировать, добавлять новые мысли
+36
12 ноября 2009, 08:35
54

комментарии (118)

+2
Joka #
оно то все конечно хорошо, но правило Деметры гласит «Объект А может вызывать любые из собственных методов. Если он создает Объект В, он может вызывать любые методы Объекта В, но ему не следует вызывать методы объектов, возвращаемых Объектом В»

у вас в примере оно явно не применялось ;)
+1
TheShock #
не сразу понял, о чём вы, но прочитал еще раз.
то есть если Map вызывает цепочку методов и в одном из них возвращается Стринг, то надо начинать новую цепочку?
ну, моя либа не заставляет нарушать правило Деметры) она даёт только функционал, а вы уже сами распоряжайтесь тем, как его правильно применить и оформить)
+4
andrew_tch #
кажется, будет убийственная нагрузка. считали использование памяти при обработке большого количества данных в цикле?
+2
TheShock #
прикинул приблизительный оверхед:
<?

$memStart 
memory_get_usage();
$array = array();
for (
$i $i 10000$i++) {
    
$array[] = str_repeat("1234567890"100);    // 11386324
    
$array[] = o(str_repeat("1234567890"100)); // 14636048
    
$array[] = 1234567890;    // 1106060
    
$array[] = o(1234567890); // 4997708
    
$array[] = range(1100);    // 111109932
    
$array[] = o(range(1100)); // 114599440
}
echo 
memory_get_usage() - $memStart;

то есть, серьёзная разница есть только в классе Number. Хотя greedykid подсказал, что там есть отличное место для уменьшения потребления памяти на четверть (перевод protected $convert в protected static $convert). Уверен, что если занятся оптимизацией, то можно значительно уменьшить и так незначительный оверхед.

Хотя, на самом деле те проценты, которые вспыли сейчас в масштабах приложения будут намного меньше)
–3
ArtemS #
Вы не учли, что подключаемые классы Number, String и т.д. занимают дополнительную память (и время), даже если экземпляров этих классов не созданы.

ИМХО у данной библиотеки есть шанс только как расширение, тогда это действительно будет удобно.
+2
greedykid #
Да, подключение всей библиотеки занимает около 304 Кб в памяти.
Впрочем, способы с этим справиться известны — для этого есть акселераторы
0
egorinsk #
И в силу особенностей php SAPI эти классы будут подключаться и создаваться при каждом запросе!
0
kastigar #
У меня есть опыт разработки экстеншенов, впринципе плевое дело перенести эту либу на си.
Могу начать, так сказать подготовить плацдарм, дальше уж сами.
Как у экстеншена, у нее действительно больше шансов.

А вообще, если честно, выглядит как попытка сделать из г**на конфетку. PHP такой какой он есть, и в этом его плюс.
Если нравится такой стиль, то может лучше слезть с PHP?
Без обид…
0
TheShock #
greedykid немного знает Си. я попрошу, чтобы он вас написал)
+1
Fesor #
Интересная идея, пока не уверен что оно того стоит, но все же можно присмотреться.
+3
Alert #
Супер! Этого реально не хватает в php, но это всё должно быть на уровне ядра =(
+1
greedykid #
Вот для этого-то и нужно делать расширение PHP.
Тогда и overhead будет минимален, и использовать библиотеку будет не менее удобно.
0
TheShock #
нууу. если будет пользоваться популярностью — появится расшиение на Си, а это будет вполне близким к «на уровне ядра». И, как уже было сказано в статье, не проблема будет использовать, так как пока хватает мощности обычного виртуального хостинга — используем библиотеку на пхп, а как только проект станет более-менее популярным, тут можно уже и сервер с пропатченным пхп взять, а переписывать ничего не придётся.
–3
OmeZ #
На уровне ядра это вряд ли будет реализовано из-за совместимости со старыми версиями, с ArrayIterator это было возможно, со String потенциально тоже ( __toString() ведь есть), но не с числами и прочими сущностями. Нужна переделка базисных принципов языка, и тогда это уже будет не php, а Ruby
–1
greedykid #
Какие базисные принципы языка, о чем вы? :)
Нужно абсолютно то же самое, что есть сейчас — но написанное на C, а не на PHP.
Т.е. проблема исключительно в производительности, но не в интерфейсах.
+2
OmeZ #
имеется ввиду число есть число а не объект как в том же Руби, это касается самого ядра и принципов по которым все пишется. Я ничего не имею против того что бы сделать расширение для пхп и использовать дополнительную функциональность, но зачем? В данном ключе сам язык такой какой есть, и если это не нравится, выбираем другой и пишем уже на нем. Хотите объекты везде — берите Java или Ruby, в чем проблема. Видите плюсы в использовании конкретно пхп — используйте его так как он есть, не придумывая велосипед по 10му разу, зачем плодить неразбериху в сущностях, когда эти самые сущности уже давно описаны и используются в контексте языка так, как задумали разработчики. Я не думаю что они не в курсе что можно использовать числа как экземпляры класса «число», и что есть такая вещь как перегрузка операторов и т.д. Просто это не нужно для самого ПХП в большинстве случаев и незачем нагружать и без того гибкий язык лишней для него мишурой
0
Ueasley #
*Currency
0
TheShock #
code.google.com/p/obj-php/source/browse/examples/KurrencyKonverter.php
смотрите коммент перед названием)
0
kykapa4a #
А что это меняет? =) Почему написали неправильно умышленно?
+3
greedykid #
Надо думать, автору очень нравится KDE :)
0
TheShock #
именно, так и есть)
0
kykapa4a #
задумался об использовании вашей библиотеки… =)
+3
TheShock #
задумались о том, что стоит, или о том, что не стоит? ;)
–5
coldFlame #
0
Ueasley #
Не понял, а почему тогда неправильно называете?
+1
TheShock #
наверное, по той же причине, что и Konqueror, Krusader, Kompare, KolourPaint и множество остальных программ ;) я заядлый КДЕшник до глубины души и тащусь от этой идеи замены первой буквы)
+3
OmeZ #
В таком случае разумно делать свой собственный KDE edition, а не вводить в заблуждение людей, которые будут пользоваться библиотекой. Ведь среди них могут быть ярые поклонники гнома, например. Халивар?
+4
TheShock #
КуренсиКонвертор не есть одним из базовых классов библиотеки, а только демонстрационный. Я надеялся, что у программистов есть немножко чувства юмора.
Я никому не навязываю свои взгляды на DE.
+10
OmeZ #
Чувство юмора относительно названий классов исчезает после первого же написанного приложения с ~50 сущностями внутри )
0
Ueasley #
Точно =)
0
greedykid #
Бросьте, это всего лишь один класс в папке «examples», который можно переименовать как угодно — изменив только одну строку. :)
0
TheShock #
поверьте, я писал такие приложения. есть случаи когда можно пошутить. есть случаи, когда надо обойтись без шуток. Это не тот случай. Вы просто ищите к чему придраться.
0
OmeZ #
ну иногда бывает, да, но совсем нечасто
+1
Novikov #
GurrencyGonvertor
+2
nblxa #
проста такъ прекольна песать, да?
+8
Mithgol #
Чувствую, что вдохновлялися библиотекою jQuery; это прекрасно.
+1
TheShock #
не совсем, не совсем. Но JQuery — в том числе.
+2
Kirk #
Скорее просто Java.
0
Pokoinik #
а если, вдруг, один из методов вернет null?
0
AndreyTS #
Да, PHP не хватает аналога .NET LINQ для коллекций, это правильный путь :)
0
OmeZ #
Ну разве что относительно коллекций, хотя это немного другая тема, чем простые массивы
0
Ueasley #
Кстати, имхо, лучше сделать ceil() и floor(), которые используют round(). Понятнее будет.
+1
TheShock #
действительно, можно добавить как алиас.
+7
webx #
Какой кошмар! А стандартным способом программировать уже не модно? Нужно везде пихать идею как в jQuery?
–1
TheShock #
уверен, во времена царствования асма, когда только появлялись более высокоуровневые языки программирования — говорили точно так же
0
keltanas #
В jquery ну пытались ECMAscript изнасиловать. Добавили удобства и кроссбраузерности. А ради чего этот огород в PHP до сих пор не понятно? Подобные библиотеки появлялись и обсуждались со времен выхода PHP4 с разным успехом. Только вот не об одной такой пока широкому кругу не известно…
Даже если напишет кто-нибудь либу на C++, будет весело смотреть на переписку с техподдержками шарахостов ))) Им то глубоко параллельно, что вы тут хотите полезную вещь для тестов запустить…
Да и в PHP такая абстракция ни к чему… просто язык такой, какой есть. А чтобы в функциях не путать, пользуйтесь справочниками. А учить новый синтаксис старых функций мне не хочется. Пусть лучше все остается, как было.
А если охото чисто на объектах писать, Вам уже предложили другие языки, где все это реализовано.
0
kostyl #
Пользуйтесь, пользуйтесь справочником. А я, не затрагивая эту реализацию, скажу, что буду пользоваться рациональным API дешевой обертки — так удобнее, чем каждый раз лезть в справочник, потому что забываешь как работает функция, из-за того, что ее интерфейс уродлив.
+1
Gisma #
вы будете пользоваться справочником чаще:
— справочник функций
— справочник библиотеки
0
kostyl #
phpDoc мне в помощь ))
а остальное я и так запомню… + я оборачиваю не только интерфейс но и реализацию… Те же mb_* с аналогами обернуты, например.
0
Gisma #
да я уверен вы и основные функции прекрасно помните :)
только вы помните 2 библиотеки и получаете растраты по размеру кода/памяти. Вы не получаете ничего, кроме красивого кода + исключения при не нетиповых операций.
Мы все мнесте это проходили на соотв. операторах C++, спасибо увольте. Всегда проще сменить язык.
Повторю, ваш код возможно (!) станет проще для понимания, но вы и так в силах делать его понятным и простым :) В приведенном примере ничего кроме ужаса возникать не должно. Как легко мы от строки ушли в сторону целого, кажется мы поступили точно также как и в обычном php:
->insert('[вставлено]', 5)
->length() // Number
->multiply(4)
->add(6, 9, new Number(15))
0
kostyl #
Еще раз скажу, что эту реализацию я не рассматривал. Я оспорил мнение о справочниках.
0
keltanas #
Я про справочники вообще между словом написал. Пользуюсь эклипсом с кодассистом и в справочник только по жизненной необходимости влезаю.

Смысл-то в том, что PHP-это процедурный язык с поддержкой ООП, а не объектный, как джава или руби и т.п.

Если начать какой-нибудь проект, основанный на данной библиотеке классов, то можно получить неизлечимые тормоза и трудночитаемый код (мне так довольно тяжело было проследить всю цепочку). А смысла в этом не на грош. Не спорю, что запрограммировать строку в пару десятков методов круто… только кто в ней будет разбираться через пол года… мозг себе сломает.

При проектировании библиотеки не было изобретено ничего нового. Если так не нравится PHP, используйте что-нибудь другое. Благо помимо пхп и перла ещё туева хуча языков, в основе которых уже реализованы объекты. Альтернатива есть.

Это не javascript, которому, собственно, альтернатив особо не намечается… (Flash или Java не в счет)

Лучше абстрагируйте то, что действительно нужно и касается конкретного проекта. А базовые типы оставьте уже в покое. Они на то и базовые.
+8
BarsMonster #
Правильно, давайте сборщик мусора посильнее нагрузим, а то стоит без дела.
Даешь замусоривание памяти огрызками объектов как в Java! :-)
+1
OmeZ #
о том и речь. Использовать такую модель часто не выгодно и сопряжено с большой нагрузкой. Ради чего весь этот код, только для fluent interface? Соглашусь — кое где это выгодно, но в АБСОЛЮТНОМ большинстве случаев не рационально
+1
xonix #
но в Java в отличие от PHP сборщик мусора очень хороший)
0
BarsMonster #
Это бесспорно :-)
0
crocodile2u #
Ньюансы: www.gramota.ru/slovari/dic/?lop=x&efr=x&zar=x&ag=x&ab=x&sin=x&lv=x&az=x&pe=x&word=%ED%FE%E0%ED%F1
Исправьте плз, глаз режет.

Насчет библиотеки: думаю, найдутся люди, которым такая штука покажется полезной. Лично я — за использование старых проверенных методов. Они хорошо документированы и код вылизан поколениями разработчиков PHP. В вашем творении, несмотря на 80% покрытия тестами — такой уверенности нет.
+2
TheShock #
естественно. в любом новом творении уверенности нету. но это не причина, чтобы не писать и не использовать ничего нового. более того, если бы все мыслили так инертно: «лучше проверенное, но старое», кто знает, на какой ветке мы бы сейчас сидели? ;)
0
Gisma #
но это же ваше утверждение запрещает вам говорить:
Принимаю восторженные отзывы и конструктивную критику :)
0
TheShock #
с чего бы это оно мне что-то запрещает?
0
Gisma #
обезьяны слезли с дерева благодаря развитию логики, вернее синтезу идеи
синтез делится на след. этапы:
— отрицание
— анализ
— умозаключению
— систез
А вы его нарушаете ;) Поэтому я и говорю Вам — запрещено
0
TheShock #
и в каком месте я его нарушаю? имхо, я просто обсуждаю статью. при этом спокойно, без грубостей и не трогая карму критикующих.
0
Gisma #
а никто вам не говорит, что вы плохой :)
я говорю, что нарушается принцип, я иронизирую
свою критику я выложил выше по тексту
0
kostyl #
Конечно на любителя и на задачу, но я пока оборачиваю только строки и даты. Большее не представляло надобности.
+1
Koc #
а я даже строки до сих пор своим class Str не обернул =)
+8
nblxa #
Спасибо, идея хорошая.

Самое главное тут не в том, что можно делать красивые цепочки как в jQuery.
Самое главное тут в том, что код вызывает исключения! Да-да, наконец-то, в 2009 году на PHP может быть реализована грамотная модель обработки ошибок при работе с примитивами!

А то, честно говоря, надоело уже держать в голове все эти возможные варианты возвращаемых значений, когда одни встроенные функции возвращают -1, другие 0, третьи не-0, какие-то false, какие-то NULL… и я думаю, не один я такой. За что автору, конечно, респект.

Ждем релиза ;)
0
TheShock #
действительно, перевести всё на исключения ­— было одной из целей. правда, пока исключения оно возвращает только кое-где. но это вопрос времени ;)

спасибо) но я все-же надеюсь, что оупен-сорс-сообщество подключится и тогда дело пойдёт быстрее, интереснее и продуктивнее)
0
Irker #
есть планы добавить это расширение в PEAR?
–1
OmeZ #
опять же вопрос совместимости
+1
nblxa #
Какой совместимости? С чем?
–1
OmeZ #
со страрыми версиями кода. Вот обновилась версия пхп на сервере и приложение легло, потому что исключения там не обработаны. И это был бы даже не варнинг, а полное падение всего
0
TheShock #
новые функции с последовательным названиями, выбросом исключений и остальными прелестями вполне можно было бы выделить в отдельные неймспейсы: \array\ *, \string\* и т.д.
0
akalend #
это все скоро будет в пхп 6
+1
corristo #
а хендлеры на необработанные исключения надо ставить, тогда сразу все в логах видно будет.
–1
OmeZ #
только уже работающему проекту это не поможет. Он все равно ляжет, смотри ты в логи или не смотри. И скорее всего так оно будет даже при правильно написаном коде, где в какой-то функции при сторонней ошибке отдается false, а не кидает эксепшн. Придется добавлять кучу try/catch в самых неожиданых местах, потому что проект писался по документации старой версии пхп, а не по новой. Единственный выход это оставить поддержку старых функций как есть, а новые с исключениями выделить в другой нэймспейс
+8
MpaK999 #
Хорошая работа!

Правда мне кажется Rubyсты тут смеются :)))
+6
nblxa #
А также джависты и дотнетчики.
+10
insa #
На самом деле рубисты тут просто рыдают.
+6
darvin #
а также питонисты
+6
Chikey #
Да и php-шники тоже «подсталом»
0
noma4i #
статичные курсы в конвертере валют… Никто ничего не заметит, только в конце месяца просто изнасилуют. Может даже посадят…
0
greedykid #
А кто мешает вам написать свой конвертер, с блекджеком и всем таким прочим? :)
Это ведь всего лишь пример.
+6
Novikov #
Посадят, а уж там как изнасилуют!
–1
TheShock #
Хе=)))) Ничего не мешает добавить метод setCurrency в наследуемом классе.
+3
DIDJER #
Мне кажется излишняя библиотека, хотя бы потому что она предназначена больше для удобства читаемости и красоты кода, но хороший программист и так читаемо код пишет, а плохой да же с этой библиотекой коряво всё сделает.

Ну это только моё мнение конечно.
+2
AxisPod #
Ну я бы сказал ничего нового и нет, длинные цепочки вызовов, невозможность человеческой отладки, если есть глюк в одном из методов, то не представляю как его найти обычным дебагером. Тупо заходить во все методы подряд и их трассировать? Это жестоко. Да, в применении к одному типу может и нормально, но с другой стороны, зачем нам писать конструкции типа

$n = new Int(5); $n->Add(5)->Mul(10)->Sub(15);

тогда как

$n = ($n +5) * 10 — 15 читабельнее

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

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

Да и без правила Деметры вообще невозможно понять где и когда с каким объектом ведется работа, получается просто каша.
0
pelenthium #
согласен, все гениальное — просто
усложнение без причины — необоснованная трата ресурсов
–1
ivolodin #
«ничто так не упрощает систему, как введение дополнительного уровня абстракции, но не бывает ничего сложнее слишком большого количества уровней абстракций»
0
pelenthium #
я так понял это цитата, очень интересен автор этого выражения )
а вообще в точку) я думаю что разработчики php имели причины сделать именно так как есть
0
ivolodin #
Не мое, народная мудрость.
0
TheShock #
если есть глюк в одном из методов, то не представляю как его найти обычным дебагером.

Достаточно вызвать метод dump после соответствующего метода:
<code>$object
  ->method1()
  ->dump()
  ->method2()
  ->dump();</code>


$n = ($n +5) * 10 — 15 читабельнее

это уже обсуждалоь на php.ru, Посмотрите, там показан вполне более читабельный код
–2
Kirk #
Честно говоря не понимаю, что прям уж такого в этом подходе, ведь в php строки (и другие типы) не объекты и в многих других языках также. Роль методов выполняют функции, а то порой бывает каша из функций и методов в некоторых языка, которые используют такую парадигму.
+18
the_buddha #
Пусть меня заминусует но лично мое IMHO что все это не нужно PHP, хотите таких красивостей пишите на Ruby на Java. Может я конечно не понимаю чего.
+2
Chikey #
ТЕБЯ ЗАПЛЮСУЮТ!!!
(ничего не имею против php, но эта библа создана для музея)
НЛО прилетело и опубликовало эту надпись здесь
+6
AntonShevchuk #
Ой, у дураков мысли сходятся:
habrahabr.ru/blogs/php/47785/
0
TiGR #
Самокритично так ;)

Уже переболел?
0
AntonShevchuk #
Изначально, перспектив у данной разработки не видел…
0
Zyava #
Интересно, многие IDE смогут показать автокомплит начиная с третьей стрелочки и дальше? Или вместо того, чтобы помнить что возвращают стандартные функции php теперь нужно запомнить объект какого класса каждая из функций каждого из Ваших классов возвращает? А, и если нет автокомплита — еще нужно запомнить все функции каждого из классов.
0
Ueasley #
А PHPDoc тебе на что?
–5
Xobb #
угу, уже вижу толпу пихопепрограммистов атакующих админов чтобы последние установили ваше расширения у себя на серверах.
+1
TheShock #
Пока человек хостится на виртуальном хостинге он использует либу на пхп. Как только проект переходит в более серьёзное состояние — на _свой_ сервер устанавливается пхп с расширением
+1
akalend #
полностью согл,
свое мнение на счет расширения — двумя комментами ниже…
–1
keltanas #
Пока человек хостится на виртуальном хостинге, его сайт будет висеть в блоке за превышение лимита используемых ресурсов. Или вообще страницы не будут успевать генериться )))) Такого уже насмотрелись…
0
TheShock #
из-за увеличения расхода памяти на 3%?
0
keltanas #
Когда напишешь, например, CMF, в которой все базовые типы будут через этот класс описаны, посмотрю, какие там будут 3 %, ага… А когда надо будет обработать массив из несколько десятков тысяч значений? Так не тестировали? Причем каждый элемент массива — тоже массив…

Я рад, что вы поразмяли свои мозги и написали этот класс… вам кажется, что совершили чудо… но об этом думали почти все, на определенном этапе изучения PHP… и приходили к выводу, что такое абстрагирование абсолютно не нужно!!!

Скоро выйдет PHP 6 и ваш класс окажется бесполезным…
0
marazm #
[irony]PHP ещё на шажок приблизился к python[/irony]
+1
akalend #
интересно а за что минус человеку?
+1
marazm #
Да это мелочи, последний раз за такое [змееводство] слили карму с 25 до текущих 6 =)
0
akalend #
хотим сделать монстра из PHP
+1
corristo #
круто, особенно если будет в виде расширения.
То что сейчас имеем в стандартной библиотеке php — леденящий душу полярный зверёк.
+2
akalend #
согл. Но, найдутся желающие реализовать подобное расширение?

Андрей Змиевский рассказывал, что для пхп 6 будет UTF-inside, а для этого надо переписать более 3 000 функций, в том числе и все строковые.

так что — это точно работа не на перспективу. Но идея автора мне понравилась.
+2
Goodkat #
Array_Object ещё и ужасно медленный в некоторых местах, хотя и написан на Си — переписав его на php я получил двадцатикрастный прирост производительности в foreach!
+1
bo883 #
скажу одно очень понравилось, полезная штука, вот если бы расширением.
0
max_m #
А где обертки для null, bool, float и resource? ;-)
0
TheShock #
float включается в number) а на счёт остального:) по сути Object может быть обёрткой для них))
0
Kodeks #
Из говна конфетку?
Хотите TypeHinting и нормальные названия — возьмите java. Получите ещё и прекрасный рефакторинг в IDE.
0
egorinsk #
ООП — это хорошо, но с библиотекой получается уродливо и некрасиво, так как в php изначально довольно неряшливый синтаксис (видимо из-за скриптовых корней языка). Вот если бы синтаксис как в Руби…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.