Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Растяжение для PHP либо все будет в Zephir’e

Anna | 31.05.2014 | нет комментариев

Вероятно у всякого PHP разработчика (и не только PHP) есть мечта — написать своё растяжение для PHP, которое по определению работает стремительней интерпретируемого кода, при этом не вникая в тонкости Zend Engine, а еще отменнее — не зная C . И вот близится тот день, когда мечта станет явью. Хочу вам рассказать об дюже увлекательном языке программирования, тот, что именуется Zephir. Кому лень читать, проходите на сайт и следуйте инструкциям, а я расскажу о том, как написать свое растяжение и о подводных камнях, которые встречаются на сием пути.

Что же такое Zephir? Zephir — это высокоуровневый язык программирования с открытым начальным кодом для стремительного и простого создания растяжения для PHP с акцентом на типы(типизированность) и безоопасность. Его синтаксис дюже схож на сам PHP.
И так начнем. Для начала нам нужно установить недостающие компоненты:

$ sudo php5-dev apt-get install re2c libjson0-dev libpcre3-dev

 

  • php5-dev — пакет с файлами для разработки растяжений
  • re2c — компилятор регулярных выражений
  • libjson0-dev — заголовки библиотеки, json-c пакета для работы с json форматом
  • libpcre3-dev — заголовки библиотеки, которая предоставляет функции для работы с регулярными выражениями

После этого сделаем клон из репозитория:

$ git clone https://github.com/phalcon/zephir.git

Версия в репозитории не неизменно стабильная, я применял commit 6eda047f512b6600cf8afc79348381c64198fcb5.
Переходим в директорию с Zephir’ом и настроим все для своего растяжение. Теперь в репозитории есть тестовое растяжение «test» — оно нам мешать не будет особенно.

$ cd zephir
$ cp -r ext/ .ext/
$ mkdir app

сделаем класс версии нашего растяжения

$ nano app/version.zep

 

namespace App;

class Version
{
	public static function get()
	{
		return "0.0.1 super beta";
	}
}

и подправим конфигурационный файл config.json

$ nano config.json

 

{"namespace":"app"}

Внимание!

  • Нэймспэйс в конфиге — это ловеркейс нэймспэйса в классе и он же имя директории с сорсами растяжения.
  • Классы в растяжении обязаны начинаться с нэймспэйса растяжения (скажем TestTestCase — неверно)
  • Всякий нэймспэйс должен быть представлен директорией, а класс предаставляется файлом с растяжением .zep
  • Все файлы и директории растяжения в ловеркейсе

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

$ sudo ./install
$ sudo ./bin/zephir compile

В итоге у нас появится в директории /usr/lib/php5/20121212/ (в зависимости от версии PHP) библиотека app.so. Ее нужно подключить к нашему PHP. Для этого сделаем следующее (пример для cli, но вы сами сумеете воспроизвести эти действия и для вашего определенного случая):

$ sudo nano /etc/php5/mods-available/app.ini

Вставим строки

; configuration for php Our Awesome App module
; priority=50
extension=app.so

И залинкуем

$ sudo ln -s ../../mods-available/app.ini /etc/php5/cli/conf.d/50-app.ini

Сейчас настало время проверить наше первое растяжение:

$ php -r "echo AppVersion::get() . PHP_EOL;"

И мы видим эти восхитительные строки:

0.0.1 super beta

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB