API PHP в JavaScript. Краткий обзор PHP.JS

Лень – двигатель прогресса. Люди постоянно создают вещи, призванные облегчить их нелегкую долю. Именно лень позволила тряпке и швабре превратиться в моющий робот-пылесос. Похожие процессы происходят и в сфере компьютерных технологий. Вместо того, чтобы довольствоваться программированием в машинных кодах, общаясь с процессором через интерфейс перфокарт, люди стали придумывать всякие клавиатуры, мышки и мониторы, а так же языки программирования. Последние становились все более и более высокоуровневыми. В результате имеем то, что иммем — далеко неполный список ЯП. Насладившись всем великолепием этого многообразия, программисты внезапно стали осознавать, что теперь им лень учить все эти языки, и они стали мечтать о единообразии на всех платформах. Так родилась JAVA. Те, кому было лень ее учить, продолжали мечтать и писать на JavaScript. Их мечты были услышаны, и с другой стороны появился node.js. А что же теперь делать нам? — подумали PHP программисты, завистливо поглядывая на чужое счастье. Засучив рукава, они принялись напряженно работать, так появился проект php.js

Удивительно, но на Хабре этот достойный внимания ресурс упоминается лишь вскользь. Восполню этот очевидный пробел.

Начну с перевода страницы About:


О сайте


php.js – это сайт, предоставляющий создаваемые сообществом альтернативы на JavaScript для функций PHP.

Если вы хотите выполнять высокоуровневые действия на платформах с JavaScript таких как веб-браузеры, node.js и т.п., то, вероятно, вам придется засесть за JS код, объединяющий низкоуровневые функции языка и выстраивать их до тех пор, пока вы не получите что-то полезное вроде: strip_tags(), strtotime(), number_format(), wordwrap() или date().

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

С другой стороны, ценя JS за его привлекательные возможности, мы призываем вас к их изучению. Никогда не используйте php.js в качестве оправдания своего нежелания уделить этому время. По этой же причине мы не портируем весь язык PHP целиком или все его управляющие структуры; мы остановили свой выбор только на функциях.

Следует добавить, что расценивая портирование вообще всего как определенный вызов, мы решили включить и даже такие низкоуровневые PHP функции как strpos, не смотря на то, что в JavaScript могут существовать их близкие аналоги (String.indexOf). Помимо интеллектуального вызова для нас самих, такое портирование открывает php.js, как для всевозможных умственных упражнений, так и позволяет ему служить целям изучения JS. Таким образом, мы видим себя как некий большой ресурс, а разработчики сами могут решить, когда для них есть смысл что-то брать отсюда. И когда нет.

Сотрудничество


Для совместной работы мы используем github. Комментарии на сайте только для замечаний. Пожалуйста, прочитайте наши руководства в Wiki.

Кто использует php.js



Лицензирование


php.js имеет дуальную лицензию – MIT и GPL. Это означает, что вы можете использовать php.js согласно условиям либо лицензии MIT, либо согласно Открытому Лицензионному Соглашению GNU (GPL) Версии 2. (сравнительный анализ лицензий прим.автора)

Лицензия MIT позволяет вам использовать эту библиотеку в любом пригодном для вас виде, даже в коммерческих проектах, коль скоро вы сохраняете оригинальную лицензию при распространении своего продукта. По сути, вам даже не требуется раскрывать ваши модификации, хотя это было бы крайне желательно и, вдобавок к этому, дало бы вам уверенность в том, что ваши изменения не будут потеряны после апгрейда. С другой стороны, лицензия GPL делает эту библиотеку совместимой с другими GPL проектами.



Итак, прежде всего этот проект будет полезен для разработчиков, хорошо знакомых с PHP и его библиотеками. Подавляющее большинство функций работает в браузере, пожалуй, только mail и fopen для локального файла на стороне клиента вернут ошибку (о том, что уже сделано и, что предстоит сделать подробно написано здесь. Добровольцы?!). Но даже, если вы по какой-то причине не знакомы с PHP, но используете JS в своих проектах, то этот ресурс безусловно будет вам полезен, хотя бы с образовательной точки зрения. Не надо ожидать чудес, на момент написания этой статьи библиотека содержит всего 452 функции, весьма далекая цифра от всего объема PHP, но, поверьте, из чего выбрать там есть.

Каждая функция на сайте приведена с подробными комментариями и примерами использования (не забудьте и про родную документацию PHP). Для получения исходников конкретной функции нужно нажать на ссылку get on github в правом верхнем углу блока с кодом. Советую забрать сразу все исходники к себе, так будет удобнее. Так как библиотека весьма обширна, то нет смысла объединять все эти функции в один большой файл, он окажется излишне тяжелым. В зависимости от потребностей конкретного проекта необходимо выборочно формировать библиотеку с нужными вам функциями. Так же имеет смысл подумать об оборачивании этого API в какой-нибудь контейнер для того, чтобы не засорять пространство глобальных имен. Ну и не забывайте про оптимизацию и сжатие кода перед отправкой в браузер.

Резюме можно сделать следующее – php.js это стабильная и обширная JS библиотека с хорошей документацией, которая может упростить/ускорить разработку ваших проектов. Так как на вкус и на цвет, все фломастеры разные, то пусть в вашем арсенале появится еще и этот инструмент, глядишь, когда и пригодится; или просто будет лень варить очередной титановый велосипед и строгать костыль красного дерева.
Поделиться публикацией
Комментарии 18
    0
    Рискую вызвать, гнев толпы, но автору респект. Конечно это извращение, но я с удовольствием потрачу пару часов, на то, чтоб покопаться в этом чуде.
      0
      Такие усилия да в правильное русло бы…
        +2
        А по мне — лучше бы наоборот
          0
          В смысле?
          В PHP основные типы примитивы, не объекты. Да и какие высокоуровневые функции JavaScript отсутствуют в PHP?
            +4
            В том смысле, что API в PHP достаточно непоследовательно, больше системы прослеживается в JS.

            А данная разработка не очень мне понятна, скорее усматриваю стремление скорейшей адаптации PHP-шников к JS, что вызывает у меня опасение, что вместо нормального обучения JS будут его использовать в стиле пхп, т.е. через одно место.
              0
              Это историческая проблема. Разработчикам PHP, привыкшим к такому будет удобнее пользоваться библиотекой, если параметры у функций будут аналогичными, а не «более правильными».

              Думаю, библиотека создана для упрощения входа в JS после PHP, от этого и результат соответственный.
                –3
                PHP для меня страшный сон, который я хочу забыть!
                А те кто будет писать в стиле PHP на JS, и использовать такие библиотеки, буду быть стулом по голове на собеседовании, чтоб не мучился.
                  +1
                  Кстати, по поводу JS, я здесь наваял: govnokod.ru/12251#comment163534
                  Крик души, так сказать.
                  +1
                  Такое впечатление, что у Вас «стиль PHP» прочно ассоциируется с процедурным программированием, которое в больших проектах, действительно, скорее всего приведет к коллапсу.

                  А, как известно, парадигму ООП можно применять даже на ассемблере. Так что PHP тут не причем — поддержка ООП в нем вполне себе хорошо реализована.
                    +1
                    Частенько бывает, что пехепешников «заставляют» писать на JS. Вот вы взяли меня на работу на php-сервер-сайд, о JS ни в вакансии ни слова не было, ни на собеседовании речи не возникло. Или возникло но чисто в контексте манипулирования DOM, но про стандартные JS библиотеки для строк, чисел и т. п. не заикались. И вдруг «внезапно» и «вчера» требуется какая-то фича на клиент-сайде, использующая стандартную библиотеку, и кроме меня её писать некому. И «нужно было вчера» реально проблема, заказчик звонит каждые пять минут, кричит, слюной брызжет, грозит неустойками и «понятиями».

                    Вы реально предпочтёте, чтобы я открыл мануал и начал читать, а как же на JS реализовывать то, что на PHP я реализовал бы за минуту? Вот понятия не имею, можно ли на JS штатно посчитать md5 хэш. В PHP — это стандартная функция, в JS — не знаю, часик мануал полистаю, возможно не найду, залезу в исходники php, перепишу с C на JS. И всё это вместо того, чтобы использовать одну функцию из php.js. Зато стулом не получу, да? :) Пример утрирован, конечно, но суть, думаю, ясна.
                      0
                      все проблемы решаются гуглением в считанные секунды — я не помню многих PHP функций (в строковых всегда путаюсь и смотрю подсказки в IDE) — и все время забывают что в JS приведение типа не (int) а parseInt() — да это вызывает некоторые трудности, но уж далеко не фатальные —
                        0
                        Вообще подходы у JS и PHP настолько разные — что смешивать их не имеет смысла. Поковыряйтесь, например в Backbone и поймете о чем речь.
                  0
                  При желании можно написать классы PHP, эмулирующие объектные типы JS. Как-то нечто подобное даже начинал делать, правда эмулировал Ruby-библиотеку, а не JS, но забил так как упёрся в ограничения синтаксиса, в ачстности в невозможность переопределять операторы.
                0
                пока насвкидку не знаю, где это можно применить, но в любом случае штука крайне занятная…
                  0
                  Когда-то забредал туда, брал некоторые реализации как основу, переделывал для себя. Как новичку JavaScript мне это было очень полезно.
                    0
                    Скажем, замечательная база couchdb позволяет писать процедуры обработки данных на JS. php.js может оказаться там весьма кстати.
                    +2
                    С одного ракурса — можно улыбнуться, вспомнив о несовершенстве самой стандартной библиотеки PHP.

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

                    Сходным образом думали авторы Sugar JS, портировав в JavaScript красоту и элегантность Ruby. Кстати, если думать только о расширении стандартного функционала, то я бы отдал предпочтение именно Sugar JS.

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

                    Самое читаемое