XHP
HackでおなじみのXHP
XSS対策はもちろんのこと、現在のReactの元(ほぼ同じ記述法)になったもの、
とご存知の方も多いと思います。
php5ではfacebookのGithubで公開されています。
が、現php7対応版は公開されておらず、Hackのみで利用可能となっています。
for php7
がしかし、php7で動くように対応したリポジトリがありました
こちらをビルドして、php7で動かしてみましょう
Linux
$ git clone https://github.com/KMK-ONLINE/xhp-php7-extension.git $ phpize $./configure $ make $ sudo make install
Mac OS
Linux環境と同じですが、最新のOSなどではgccが古いためmakeに失敗します。 brew などでgccをinstallし、Makefileを変更するか、CC= CXX= などで指定するとmake できると思います
変更する場合は、xhp-php7-extension/xhp/Makefileのgcc, g++をbrewなどでinstallしたgccに変更します。
gcc-6 g++-6の場合は以下のようになるでしょう
ifdef DEBUG CPPFLAGS = -fPIC -ggdb -Wall -DDEBUG -std=c++11 else CPPFLAGS = -fPIC -g -Wall -O3 -minline-all-stringops -std=c++11 endif ifdef PROFILE CPPFLAGS += -pg endif FLEX = `which flex35 2>/dev/null || which flex 2>/dev/null` all: libxhp.a libxhp.so clean: -rm libxhp.a xhpize parser.yacc.cpp scanner.lex.cpp scanner.lex.hpp parser.yacc.output parser.yacc.hpp fastpath.cpp version.h *.o 2>/dev/null parser.yacc.cpp: parser.y bison --debug --verbose -d -o $@ $< parser.yacc.hpp: parser.yacc.cpp scanner.lex.cpp: scanner.l $(FLEX) \ -C --header-file=scanner.lex.hpp -o $@ -d $< scanner.lex.hpp: scanner.lex.cpp fastpath.cpp: fastpath.re re2c -c -o $@ $< %.o: %.cpp g++-6 -c $(CPPFLAGS) -o $@ $< xhp_preprocess.o: xhp_preprocess.cpp scanner.lex.hpp parser.yacc.hpp parser.yacc.o: scanner.lex.hpp scanner.lex.o: parser.yacc.hpp libxhp.a: code_rope.o rope_entity.o scanner.lex.o parser.yacc.o fastpath.o xhp_preprocess.o $(AR) -crs $@ $^ libxhp.so: code_rope.o rope_entity.o scanner.lex.o parser.yacc.o fastpath.o xhp_preprocess.o g++-6 -shared -Wl,-soname,libxhp.so -o libxhp.so $^ version.h: echo "#define XHPIZE_VERSION \""`git show -s --format="%h - %ci" HEAD`"\"" >> version.h xhpize: xhpize.cpp libxhp.a version.h g++-6 $(CPPFLAGS) -o $@ $^ rope_test: rope_test.cpp code_rope.o rope_entity.o g++-6 $(CPPFLAGS) -o $@ $^ .PHONY: all clean tags
*CentOS 7, Ubuntu16.04環境で動作確認
install後php.ini にextensionを追加します
extension=xhp.so
composer
xhpのextensionに加え、ライブラリをインストールします(kmklabs/xhp)
"require": { "kmklabs/xhp": "^1.6" }
はじめてのxhp
Reactと同様です。
このextensionを利用する場合は、
<?hh
にするか、 <?php // xhp
と指定する必要があります
<?php // xhp require __DIR__ . '/vendor/autoload.php'; /** * Class */ class :ytake:something extends :x:element { protected function render() { return <div class="hello">it's work!</div>; } } echo <ytake:something /> . "\n";
動作が確認できればOKです
その他
ビルドはできましたが、自分の環境では正しく動きませんでした github.com