LINUX.ORG.RU

qJerry: пиши меньше, делай больше. Теперь на PHP

 , , , ,


0

0

Увидела свет первая публичная версия библиотеки qJerry, предназначенной для облегчения работы с XML в PHP.

qJerry является своеобразной обёрткой для расширения DOM и почти полностью копирует поведение и API библиотеки jQuery, знакомый многим веб-разработчикам. Его основная задача — предоставить возможность оперировать XML-документами на стороне сервера посредством тех же идей и приципов, включая matched sets, chaining и имена методов. Он позволяет загружать, сохранять, опрашивать, изменять и создавать с нуля XML-документы. В качестве языка запросов используется XPath.

>>> Библиотека qJerry

★★★

Проверено: Shaman007 ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Ещё один велосипед, или по ту сторону сервера до сих пор эра динозавров?

Deleted ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Чем это лучше SimpleXML ?

anonym_mouse ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Улыбнуло! Костыль для недоязычка, в котором даже нормальной объектной модели нет.

В jQuery есть хоть какая-то концепция, можно с Java-фреймворками использовать (e.g. http://www.wickext.org/) , а какая концепция в уродливом Пых-Пыхе?

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Я не такой умный, чтобы "изобретать велосипед из руды" (с)

Я умею лабать компоненты на расширениях jQuery, которых полным-полно в сети. Я знаю Джаву и современные Java-фреймворки. Что же касается PHP то это поделие, которое 1) не имеет нормальной объектной модели, 2) никак не масштабируется, 3) плохо работает под большой нагрузкой.

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Интересно сколько понадобится кода жабы и библиотек для того чтобы собрать xml-ку. А потом чтобы это все запустить и показать результат подобно тому примеру который показан по ссылке понадобится наверно гораздо больше времени чем это будет на PHP.

crono ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> Интересно сколько понадобится кода

Ой-вей! Данное утверждение - суть плод невежества и незнания Java технологий. Вы-таки хоть бы для приличия в книжечку заглянули, прежде чем постить такие глупости. Или мне уже примерчик привести?

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> Ещё один велосипед, или по ту сторону сервера до сих пор эра динозавров?

Что касается обработки XML, то ничего похожего на jQuery там и близко нет. По крайней мере в PHP.

theSoul ★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> Чем это лучше SimpleXML ?

Единственный способ проверить это - реализовать одну и ту же задачу с помощью того и другого инструмента. Хотя, может быть достаточно сравнения API.

theSoul ★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Переведите на PHP

public class Over {
     void m() {
         System.out.println("m()");
     }

     void m(int i) {
         System.out.printf("m(int %d) \n", i);
     }

     public static void main(String[] args) {
	Over over = new Over();
        over.m();
        over.m(101);
     }
}

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Понял о чём ты. У каждого свои недостатки. Переведи на Java:

class forum_topic extends base_object_db
{
    function main_table() { return 'topics'; }
    function fields() { return array('id', 'title', 'author_name'); }
}


$topic = object_load('forum_topic', $id);

echo "Имя автора темы {$topic->title()}: {$topic->author_name()}";

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Да, и ещё, там, где в PHP можно написать что-то типа

function my_split($delimiter = ' ', $as_hash = true) { ... }

в Java придётся писать три функции :) Пусть даже две из них будут в одну строчку.

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

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

class Over2 {

     protected void m() {
         System.out.println("m()");
     }


     protected void m(int i) {
         System.out.printf("m(int %d) \n", i);
     }
}


public class Over2Test {
     public static void main(String[] args) {
	Over2 o2 = new Over2();
        o2.m();
        o2.m(101);
     }

}

Или Вы-таки сдаетесь?

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Ты мне сперва ответь на мой пример ;)

Кстати:

А так:

function m($i = NULL)
{
    if(is_null($i)) { ... } else { ... }
}

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

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

Да, я буду использовать Hibernate & JPA

...

Query query = manager.createQuery("from Topics"); for (Topics topic : (List<Topic>) query.getResultList()) { System.out.println("Имя автора темы " + topic.getTitle() + ": " + topic.getAutorName() ); }

...

Зато у меня будкт

1) нормальный пул соединений

2) нормальный кэш второго уровня

3) нормальная поддержка транзакций

4) легкая модифицируемость кода моими коллегами

5) Тестирование jUnit

6) система построения проектов Maven

и так далее...

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> А теперь вни-ма-тель-но прочитайте об ограничениях, накладываемых в PHP на перегрузку методов. И таки сделайте мой примерчик.

Ваш примерчик я сделаю, только если вы надеетесь увидеть в определении класса объявление двух методов с одинаковым именем, то увы. Будет один метод, а внутри условная конструкция.

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

theSoul ★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Зато у меня будкт

Когда у тебя в классе будут 40 полей, тебе на все эти 40 полей придётся писать переменную хранений, геттер и сеттер. А мне - только перечислить 40 полей БД.

>1) нормальный пул соединений

Это есть и в моём варианте.

>2) нормальный кэш второго уровня

Аналогично.

>3) нормальная поддержка транзакций

Даже на myisam? :) А на БД, поддерживающих транзакции никто не мешает юзать их и мне.

>4) легкая модифицируемость кода моими коллегами

Мой модифицировать проще. Потому что там всё прозрачнее.

>5) Тестирование jUnit

У меня есть phpUnit :)

>6) система построения проектов Maven

Эту не знаю. Но оправдывает ли она тонны лишней ручной писанины?

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

АПВОВНВ? Я говорю о неполноценности ОО модели в ПХП.

Однако, я сегодня добрый

public class Test {

    static void m(int ... i) {
        if (i.length == 0)  {
	   System.out.println("0");
        } else {
	   System.out.println("1");
        }
    }

    public static void main(String[] args) {
	m();
        m(1);
    }
}

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Хороша "практика"!

find /home/balancer/work/L2J_Fortress/trunk/ -iname '*.java'|wc -l
1074

$ find /home/balancer/work/L2J_Fortress/trunk/ -iname '*.java' -exec cat {} \; | wc -c
4738486

Я понимаю, что бывает немало и более толстых проектов, но и этом, думаю, позволяет мне делать выводы о возможностях Java ;)

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Я говорю о неполноценности ОО модели в ПХП.

У тебя очень специфическое понятие о полноценности :)

А с моей точки зрения у Java будет неполноценная рефлексия :D

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>>1) нормальный пул соединений

> Это есть и в моём варианте.

Обосновать

>>2) нормальный кэш второго уровня

>Аналогично.

Обосновать.

>>3) нормальная поддержка транзакций

>Даже на myisam? :) А на БД, поддерживающих транзакции никто не мешает юзать их и мне.

1) Не, у меня PqSQL. 2) Аннотации уже рУлят в PHP,

>>4) легкая модифицируемость кода моими коллегами

> Мой модифицировать проще. Потому что там всё прозрачнее.

Улыбнуло! У меня строгие типизация.

>>5) Тестирование jUnit

>У меня есть phpUnit :)

ROTFL! http://sourceforge.net/projects/phpunit/ - версия ПОЗОРИЩЩЕ! Можно сравнить "phpТазик" с "Java Бэхой"

>>6) система построения проектов Maven

> Эту не знаю. Но оправдывает ли она тонны лишней ручной писанины?

Учите матчасть, коли хотите иметь хорошую практику. Без знания мавена нынче на работу не берут. :)

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> А с моей точки зрения у Java будет неполноценная рефлексия :D

Аргумент типа "А еще в Америке негров бьют" (с)

А обосновать? Я привел конкретный код, а не свои субъективные измышления.

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Я привел конкретный код

Ты привёл неправильный код.

Мой код - это описание независимого класса, который, наряду с прочим, мапится на таблицу БД. Ты привёл лишь пример работы с БД. Где у тебя описание отдельного класса топика форума? Кроме банального запроса к БД там будут ещё тонкости, типа проверки доступа, статического кеширования, фильтрации топиков и прочих вещей, которых нет в class Query. А если завтра я этот объект захочу с использования БД перевести на использование XML?

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> просто показатель того, что Java - не серебряная пуля.

Абсолютно согласен. Джава - язык программирования корпоративных приложений сo

1) строгой

2) полиморфной

3) статической

типизацией.

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Java - это язык со СТРОГОЙ типизацией. Еще вопросы?

Ты выбираешь языки под задачи или задачи натягиваешь под языки?

Видишь ли, в ТЗ на конкретные проекты обычно не указывают типизацию платформы :)

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> Мой код - это описание независимого класса,

Ну про строгую теорию типов Рассела, Черча и Карри Вам-таки проф.Луговский расскажет.

А я скажу:

"Типизация. Позволяет устранить многие ошибки на момент компиляции, операции проводятся только над объектами подходящего типа."(с)

Типизация в PHP - на уровне Бейсика.

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Типизация. Позволяет устранить многие ошибки на момент компиляции, операции проводятся только над объектами подходящего типа.

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

Нужна надёжность (и производительность кода ;)) в ущерб скорость написания - выбирай Java. Нужна скорость написания/отладки и гибкость - выбирай PHP.

Выбирай язык под задачу.

Поэтому я программирую сейчас и на PHP, и на Java ;)

...

А системные скриптики под себя обычно на Python пишу. Тоже свой ряд плюсов и минусов...

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> В Бейсике в целочисленную переменную строку не запишешь ;)

Не знал, говорю честно. Значит, Бейсик - это более безопасный язык программирования, чем PHP.

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> страшно увеличивает объём писанины и делает невозможным рантайм-модификацию объектов.

Ну и что? Вопрос в устойчивости (robust) кода.

Bioreactor ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Ну и что?

А то, что задачи бывают разные. Когда ты пишешь многолетний поддерживаемый проект из категории «один раз написал, долго пользуешься» - Java, как правило, более оправдана.

Когда требуется за неделю слепить сайт с сотней объектов в десятках категорий со сложной внутренней логикой - тут Java в пролёте. Я неделю только код буду писать. По 8 часов в сутки :) А уж отладка потом...

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

На PHP не напишешь среду разработки. Вот я для разработки на PHP использую 2 IDE и обе написаны на Java (-;

А ещё, в PHP до сих пор нет поддержки XSLT 2.0, а в Java - есть (Saxon). Так что если мне сильно понадобится XSLT 2.0, придётся писать на Java.

theSoul ★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>На PHP не напишешь среду разработки. Вот я для разработки на PHP использую 2 IDE и обе написаны на Java (-;

Ну так и на bash'е сред разработки нет, но кто скажет, что bash-скрипты не нужны? ;)

>А ещё, в PHP до сих пор нет поддержки XSLT 2.0, а в Java - есть (Saxon). Так что если мне сильно понадобится XSLT 2.0, придётся писать на Java.

Правильно. Язык выбирается под задачу.

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>А ещё, в PHP до сих пор нет поддержки XSLT 2.0, а в Java - есть (Saxon). Так что если мне сильно понадобится XSLT 2.0, придётся писать на Java.

Кстати, никто не мешает поднять Quercus под тем же Томкетом ;) И юзать Saxon из PHP...

KRoN73 ★★★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

> Кстати, никто не мешает поднять Quercus под тем же Томкетом ;) И юзать Saxon из PHP...

Про Quercus не слышал. Поднимал PHP/Java Bridge, но так и не смог добиться работы callback'ов из XSLT-процессора в PHP. А без этой возможности толку он него мало.

theSoul ★★★ ()

Re: qJerry: пиши меньше, делай больше. Теперь на PHP.

>Про Quercus не слышал.

Это pure-java реализация PHP под Resin. Легко, на одних конфигах прикручивается к Tomcat. Имеет производительность ноздря в ноздрю с нативным PHP с php-акселератором. Можно делать прямые вызовы Java-классов/методов из PHP. Функционал PHP5 реализован, наверное, процентов на 95 - есть почти всё. Из нужного мне отсутствуют только проверки propery_exists (method_exists - есть). Вот список нереализованных: http://www.sypc.org.cn:8081/resin-doc/doc/quercus-module-status.xtp#Unimpleme... Functions

Под Quercus из известных PHP-проектов работает Mediawiki, DokuWiki, Drupal, phpMyAdmin, Wordpress и т.д. - http://www.caucho.com/resin-3.1/doc/quercus.xtp#existing

Думаю попробовать заняться интеграцией, когда напишу, наконец, свой JBForth2 :) Пока просто на уровне тестов гонял свой фреймворк - работает, но требуются воркэраунды на тему property_exists :)

KRoN73 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.