LINUX.ORG.RU

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

 , , , ,


0

0

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

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

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

★★★

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

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

Deleted
()

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от crono

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

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

crono
()
Ответ на: комментарий от crono

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

> 1) не имеет нормальной объектной модели

Вы отстали от жизни. В PHP5 очень даже вменяемая объектная модель, не то что в PHP4.

theSoul ★★★
() автор топика
Ответ на: комментарий от Deleted

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

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

theSoul ★★★
() автор топика
Ответ на: комментарий от anonym_mouse

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

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

theSoul ★★★
() автор топика
Ответ на: комментарий от theSoul

Переведите на 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 ★★★★★
()
Ответ на: комментарий от Bioreactor

Note: PHP's interpretation of "overloading" is different than most object oriented languages. Overloading traditionally provides the ability to have multiple methods with the same name but different quantities and types of arguments.

theSoul ★★★
() автор топика
Ответ на: комментарий от Bioreactor

Понял о чём ты. У каждого свои недостатки. Переведи на 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 ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от theSoul

А теперь вни-ма-тель-но прочитайте об ограничениях, накладываемых в 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 ★★★★★
()
Ответ на: комментарий от Bioreactor

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

Кстати:

А так:

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Да, я буду использовать 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 ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

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

theSoul ★★★
() автор топика
Ответ на: комментарий от Bioreactor

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

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

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

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

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

Аналогично.

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

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

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

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

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

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

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

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 ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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 ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

Обосновать

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

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

Обосновать.

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

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

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

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

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

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

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

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

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

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

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

1) строгой

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

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

типизацией.

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

А я скажу:

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

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

Ты или PHP не знаешь, или Бейсик.

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Правильно, кому апельсин нравится, кому киви. Вопрос в том, что подходит для EnterpriZe, а что для osCommerce и PHP-Fusion.

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

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

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

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

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

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

...

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

>Ну и что?

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

theSoul ★★★
() автор топика
Ответ на: комментарий от theSoul

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

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

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от theSoul

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

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

theSoul ★★★
() автор топика
Ответ на: комментарий от theSoul

>Про 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 ★★★★★
()
Ответ на: комментарий от theSoul

А сразу Java заюзать для этой цели?

И какие конкретно функции? М.б. есть, могу проверить. Под рукой есть развёрнутый Quercus/Tomcat.

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