SlideShare a Scribd company logo
PHP と JavaScript の噺
@ooharabucyou
第76回 PHP勉強会
わたしについて
● PHP歴 = 7年, エンジニア歴 = 6年
● Rakuten, inc. なんと新卒4年目になる
● 最近のお仕事
○ node.js でバックエンドなシステムづくり
■ BaaS Team, Web Sevice Platform Group
○ Java & Groovy でバックエンドなシステムづくり
○ http://webservice.rakuten.co.jp 楽天API 運用・開発・
宣伝何でもやる課
○ PHPはちょっと見るくらい
■ 一番最近やったPHP仕事は Symfony2.0 から 2.3
へのバージョンアップ
最近
● サーバサイドでも JavaScript 書く人になった
今日のテーマ
JavaScript
X
PHP
JavaScript X PHP にまつわる噺 3本
1. JavaScript 上で PHP(的)な関数を走らせたい
2. JavaScript 上で PHP(っぽいもの) を走らせた
い
3. PHP 上で JavaScript を走らせたい
PHPとJavaScriptの噺
まってくれ
そんなにバカ話じゃない
● その1 は実用的ですよ
その1: JavaScript で PHP(的)な関数を
使いたい
● PHPer のみなさん! こんな経験ありませんか?
○ ようし! クライアントサイド/サーバサイド な JavaScript
書くぞーー
○ あれ、PHPで便利にできるアレ、JavaScript でどうやる
んだ???
○ strtotime(), array_*(), rawurlencode(),
htmlspecialchars() もなしにワシはどう開発すればいい
んじゃ。
array_merge() っぽいことを
js でやるには
var merge = function(obj1, obj2) {
obj2 = obj2 || {};
for (var name in obj2) {
obj1[name] = obj2;
}
};
// なんか関数をつくらなきゃいけない
// PHP のように渡した値が変更されないようにするには、オブ
ジェクトのclone を実装する必要がある
strtotime() っぽいことを
js でやるには
var strtotime = function(str) {
var date = new Date(str);
return Math.round(date.getTime() / 1000);
};
// これは超適当実装です。一部ブラウザは対応し
ないかも
// ほかにも +2days とか実装したいとか思ったらよ
り至難の業
PHPとJavaScriptの噺
もちろん便利なライブラリはあるけど
● 例えば
○ jQuery な機能を駆使
○ underscore.js (配列のマージとか、フィルタなど便利な
機能を提供)
○ Moment.js (時間関連の処理を強力にサポート)
慣れ親しんだ
PHPの関数を使いたい
そこで便利なのが php.js
● http://phpjs.org/
● PHPのあの関数や、例の関数をJavaScriptの
世界で再現!
● node.js 使いは npm install phpjs で、使えるよ!
● ブラウザでも動くよ。
ブラウザ上での使い方
● https://github.com/kvz/phpjs から clone
● functions/ 下に関数ごとに js が入っているので <script> で
ロードする
● あとは、そのまま使える
<script src=”
phpjs/functions/array/array_merge.js”
></script>
<script>
array_merge([“Hello”], [“World”]); //
[“Hello”, “World”]
</script>
node.js 上での使い方
● npm install phpjs でインストール
● あとは以下のように使える。
var php = require(‘phpjs’);
php.array_merge([“Hello”],
[“World”]); // [“Hello”, “World”]
例の array_merge() も
● 元のオブジェクト非破壊
● 第3引数以上も指定可能
var php = require('phpjs')
, obj = { foo: ‘bar’ };
php.array_merge(obj, {
hoge: ‘fuga’
}); // { foo: ‘bar’, hoge: ‘fuga’}
あの strtotime() が!
● 便利だけど再現性はまだまだ?
● 元祖 strtotime() すごいよ!
// strtotime & date
var t = php.strtotime('+7 days');
php.date('Y-m-d', t); // 今日から7日後の日付
t = php.strtotime('2014-01-01 10:00:00');
php.date('Y-m-d H:i:s', t); // 2014-01-01 10:00:00
t = php.strtotime(‘2014-01-01 10:00:00 +7 days’);
php.date(‘Y-m-d’, t); // 今から7日後の日付 (本家は 2014-01-08を示す)
いるのか? echo()
● いるのか? と思ったけど、環境ごとの出力の仕
方などを担っている模様。
● 結構、重厚たるコード量
○ http://phpjs.org/functions/echo/
● node.js なら console.log() 、ブラウザなら
DOM要素追加
● 出力のある、もろもろの関数は、この関数に依
存している。
var_dump() だって!!
● 型も表示してくれるぞ!
● (ブラウザの場合 echo.js のロード必須)
● なんだ。。 PHP はやっぱり JSON でできていた
んじゃないか? そうに違いない。(PHP勉強会72
回 中野さんの JSON Schema の説明参照
http://www.slideshare.net/hinakano/json-
schema)
var_dump() さん ひょっとして console.log() さ
んより便利なんじゃないか
● 使いどころ間違えなきゃ便利なんじゃないか。
● 関数の中身も toString() しておっぴろげてくれ
るぞ!!
○ なお、本家PHPで同じようなことやると Closure#1 の
ようにしか表示されない
● なお、 node.js の util.inspect() は、そ
のままだと [Function] としか出してくれない模
様。
urlencode() だってPHP基準?
● 闇PHP勉強会 の @co3k さんの資料参照
(http://www.slideshare.net/ebihara/php-
32340906)
● php.js の urlencode() は空白は + に置き換
え、~ はエンコードしない模様。
● rawurlencode() もあるよ。
file_get_contents() はデフォルトで
“同期処理” でコンテンツ取得
● file_get_contents(“test”); とやると、
XHR (XmlHttpRequest) でのコンテンツ取得を
行う。
● デフォルトでは同期処理。
○ つまり、これ使うと一旦処理がとまるよ!
● 非同期処理を 第3引数 context で行うことがで
きる。
○ 本家は、header 周りとかの制御につかったりする。
なお非同期 file_get_contentns()
file_get_contents('data', false, {
stream_params: {
'phpjs.async': true,
notification: function(code, severity, msg, st, bt) {
if (code >= 8) {
var_dump(this.responseText);
}
}
}
});
// こんなの PHP じゃないわ!!!!
// file_get_contents() がついた JavaScript よ!!!!
// だったら(コールバック関数を) 呼べばいいだろ!!
(注意?) implode() は歴史的事情知らず
● さすがに例の順序逆も受け付ける仕様はは
いってなかった。
● 実装面倒だもんね。しょうがないよね。
php.implode(',', [‘Hello’, 'world']); // Hello,world
php.implode([‘Hello’, ‘world’], ‘,’); // ,
それでも物足りないあなた
● php.js は 325 の関数に対応
○ 本家には 3,000 以上あるってよ。へー。
● でも、そもそも JavaScript なんて書きたくな
い! とにかくPHP が書きたいんだ! という人
(中毒者?) もいるかもしれない。
● そこで、また別の php.js を紹介
その2: php.js - PHP VM with
JavaScript
● そもそも JavaScript 上で PHP を実行してしま
えばいいんじゃないかという発想のモノ
● ブラウザで動くぞ!!!
● class も magic method もちゃんと動くぞ!!
● 関数も一部はサポートしている模様。
● http://phpjs.hertzen.com/
○ (ブラウザでデモができます)
ブラウザで php.js VM を動かす
<script src="PHP.js"></script>
<script src="adapters/filesystem/xhr.js"></script>
<!-- PHP.js と filesystem 用の adapter をロード -->
<script>
var opts = {};
opts.filesystem = new PHP.Adapters.XHRFileSystem();
var path = window.location.pathname;
opts.SERVER = {
SCRIPT_FILENAME: path.substring(0, path.length)
};
var engine = new PHP(‘<?php echo “Hello”;’, opts);
console.log(engine);
console.log(engine.vm.OUTPUT_BUFFER);
</script>
node.js 上で php.js VM を動かす
var fs = require('fs')
,content = fs.readFileSync('php.js', 'utf8') ;
eval(content);
var opts = {
filesystem: fs,
SERVER: {
SCRIPT_FILENAME: 'file’
}
};
var engine = new PHP('<?php echo "sample";', opts);
console.log(engine.vm.OUTPUT_BUFFER);
php.js VM の不思議
● php_logo_guid() が実装されている
○ ロゴの guid を取得できるよ!
■ で、だからどうした。。
■ ちなみに、隠し関数(?)の
php_egg_logo_guid() もあるよ!
○ 【悲報】なお、本家側では、この関数は PHP5.5 で削除
された模様
その3: PHP上でJavaScript を走らせる
● 逆に PHP上で V8 JavaScript Engine を利用し
て JavaScript を実行することもできる。
● http://www.php.net/manual/ja/book.v8js.php
● 使い道思いつかない!
インストール方法 (Ubuntu)
sudo apt-get install libv8js-dev
# まだbeta なのだよ
pecl install v8js-0.1.5
# アレ登録
sudo echo “extension=v8js.so” >
/etc/php5/conf.d/v8js.ini
コード
<?php
$v8 = new V8Js();
$JS = <<<JS
var hello = function() {
return "Hello!";
};
hello();
JS;
try {
var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
var_dump($e);
}
まとめ
● あのPHPの関数が JavaScript でほしい / どう
実装するのか知りたい
○ php.js (http://phpjs.org/)
● そもそもPHPの構文をクライアントサイド上で動
かしたい
○ php.js VM (http://phpjs.hertzen.com/)
● JavaScript をPHP上で動かしたい (!?)
○ v8js module
○ だれか、これだ!っていう使い道を教えてくれ

More Related Content

PDF
PHPデプロイツールの世界
PDF
恋に落ちるデプロイツール
PPTX
PHP x AWS でスケーラブルなシステムをつくろう
PDF
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
PDF
PHPの今とこれから2015
PDF
Laravel5.1 Release
PPTX
Re: WebServer BenchMarking
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
PHPデプロイツールの世界
恋に落ちるデプロイツール
PHP x AWS でスケーラブルなシステムをつくろう
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
PHPの今とこれから2015
Laravel5.1 Release
Re: WebServer BenchMarking
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS

What's hot (20)

PDF
Php非同期の技法
PDF
Laravel 5.1 LTSでサービスを作る
PPTX
今日から始めるLaravel
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PDF
いまどきのPHP開発現場 -2015年秋-
PDF
php開発で使うタスクランナー gulp
PDF
Cake php + php unitによる実践的ユニットテスト
PPTX
Behat Driven Development
PDF
なんとかStormに負けたくないEmacs初級篇
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった
PDF
フレームワークを使うべき 3 つの理由
PDF
Laravel / Lumen 次の一歩
PDF
5分でわかる静的解析入門
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料
PDF
Laravel_オープンソースカンファレンスhokkaido_JP_2014
PPTX
PHPで並列処理する ライブラリを作った
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
PDF
はじめてLaravelさわった 第86回php勉強会
PDF
TravisCI Nightに行ってきたので情報展開
PPTX
Jenkins tips 20161014
Php非同期の技法
Laravel 5.1 LTSでサービスを作る
今日から始めるLaravel
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
いまどきのPHP開発現場 -2015年秋-
php開発で使うタスクランナー gulp
Cake php + php unitによる実践的ユニットテスト
Behat Driven Development
なんとかStormに負けたくないEmacs初級篇
apachehereというPHPのBuiltin Serverっぽいやつをつくった
フレームワークを使うべき 3 つの理由
Laravel / Lumen 次の一歩
5分でわかる静的解析入門
PHPカンファレンス2014の懇親会飛び込みLT資料
Laravel_オープンソースカンファレンスhokkaido_JP_2014
PHPで並列処理する ライブラリを作った
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
はじめてLaravelさわった 第86回php勉強会
TravisCI Nightに行ってきたので情報展開
Jenkins tips 20161014
Ad

Similar to PHPとJavaScriptの噺 (20)

PPTX
PHP AV BINDING
PDF
8時間耐久 PHP構築の教室
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
KEY
php-timecopを実戦投入してみた
PDF
Phpのレガシーコードをrubyで焼き変えてみた
PDF
griffon plugin を 実際に作ってみよう #jggug
KEY
PHPエクステンションの開発tips
PPT
20090801phpstudy Sanemat
PDF
Arduino を PHP で制御する
PDF
Webサーバ、HTML
PDF
あなたの安心を高速に守る Container-based CI
PDF
PyPy 紹介
PDF
Phjosh(仮)プロジェクト
ODP
20090704rubyist九州
PDF
JIT for PHP を試した
PDF
PHP で実行中のスクリプトの動作を下から覗き見る
PDF
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PDF
PSGIへの誘い
PHP AV BINDING
8時間耐久 PHP構築の教室
次世代言語 Python による PyPy を使った次世代の処理系開発
今日から始めるGopher - スタートGo #0 @GDG名古屋
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
php-timecopを実戦投入してみた
Phpのレガシーコードをrubyで焼き変えてみた
griffon plugin を 実際に作ってみよう #jggug
PHPエクステンションの開発tips
20090801phpstudy Sanemat
Arduino を PHP で制御する
Webサーバ、HTML
あなたの安心を高速に守る Container-based CI
PyPy 紹介
Phjosh(仮)プロジェクト
20090704rubyist九州
JIT for PHP を試した
PHP で実行中のスクリプトの動作を下から覗き見る
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PSGIへの誘い
Ad

More from Shogo Kawahara (7)

PDF
東京から仙台まで歩く方法
PDF
Phpmatsuri2013
KEY
Composer による依存管理 と Packagist によるライブラリの公開
KEY
Composer
KEY
Sismoをいじくる
KEY
PHPの普段使わない関数を使う
PPTX
OAuth with OpenPNE3
東京から仙台まで歩く方法
Phpmatsuri2013
Composer による依存管理 と Packagist によるライブラリの公開
Composer
Sismoをいじくる
PHPの普段使わない関数を使う
OAuth with OpenPNE3

PHPとJavaScriptの噺

  • 1. PHP と JavaScript の噺 @ooharabucyou 第76回 PHP勉強会
  • 2. わたしについて ● PHP歴 = 7年, エンジニア歴 = 6年 ● Rakuten, inc. なんと新卒4年目になる ● 最近のお仕事 ○ node.js でバックエンドなシステムづくり ■ BaaS Team, Web Sevice Platform Group ○ Java & Groovy でバックエンドなシステムづくり ○ http://webservice.rakuten.co.jp 楽天API 運用・開発・ 宣伝何でもやる課 ○ PHPはちょっと見るくらい ■ 一番最近やったPHP仕事は Symfony2.0 から 2.3 へのバージョンアップ
  • 5. JavaScript X PHP にまつわる噺 3本 1. JavaScript 上で PHP(的)な関数を走らせたい 2. JavaScript 上で PHP(っぽいもの) を走らせた い 3. PHP 上で JavaScript を走らせたい
  • 8. その1: JavaScript で PHP(的)な関数を 使いたい ● PHPer のみなさん! こんな経験ありませんか? ○ ようし! クライアントサイド/サーバサイド な JavaScript 書くぞーー ○ あれ、PHPで便利にできるアレ、JavaScript でどうやる んだ??? ○ strtotime(), array_*(), rawurlencode(), htmlspecialchars() もなしにワシはどう開発すればいい んじゃ。
  • 9. array_merge() っぽいことを js でやるには var merge = function(obj1, obj2) { obj2 = obj2 || {}; for (var name in obj2) { obj1[name] = obj2; } }; // なんか関数をつくらなきゃいけない // PHP のように渡した値が変更されないようにするには、オブ ジェクトのclone を実装する必要がある
  • 10. strtotime() っぽいことを js でやるには var strtotime = function(str) { var date = new Date(str); return Math.round(date.getTime() / 1000); }; // これは超適当実装です。一部ブラウザは対応し ないかも // ほかにも +2days とか実装したいとか思ったらよ り至難の業
  • 12. もちろん便利なライブラリはあるけど ● 例えば ○ jQuery な機能を駆使 ○ underscore.js (配列のマージとか、フィルタなど便利な 機能を提供) ○ Moment.js (時間関連の処理を強力にサポート)
  • 14. そこで便利なのが php.js ● http://phpjs.org/ ● PHPのあの関数や、例の関数をJavaScriptの 世界で再現! ● node.js 使いは npm install phpjs で、使えるよ! ● ブラウザでも動くよ。
  • 15. ブラウザ上での使い方 ● https://github.com/kvz/phpjs から clone ● functions/ 下に関数ごとに js が入っているので <script> で ロードする ● あとは、そのまま使える <script src=” phpjs/functions/array/array_merge.js” ></script> <script> array_merge([“Hello”], [“World”]); // [“Hello”, “World”] </script>
  • 16. node.js 上での使い方 ● npm install phpjs でインストール ● あとは以下のように使える。 var php = require(‘phpjs’); php.array_merge([“Hello”], [“World”]); // [“Hello”, “World”]
  • 17. 例の array_merge() も ● 元のオブジェクト非破壊 ● 第3引数以上も指定可能 var php = require('phpjs') , obj = { foo: ‘bar’ }; php.array_merge(obj, { hoge: ‘fuga’ }); // { foo: ‘bar’, hoge: ‘fuga’}
  • 18. あの strtotime() が! ● 便利だけど再現性はまだまだ? ● 元祖 strtotime() すごいよ! // strtotime & date var t = php.strtotime('+7 days'); php.date('Y-m-d', t); // 今日から7日後の日付 t = php.strtotime('2014-01-01 10:00:00'); php.date('Y-m-d H:i:s', t); // 2014-01-01 10:00:00 t = php.strtotime(‘2014-01-01 10:00:00 +7 days’); php.date(‘Y-m-d’, t); // 今から7日後の日付 (本家は 2014-01-08を示す)
  • 19. いるのか? echo() ● いるのか? と思ったけど、環境ごとの出力の仕 方などを担っている模様。 ● 結構、重厚たるコード量 ○ http://phpjs.org/functions/echo/ ● node.js なら console.log() 、ブラウザなら DOM要素追加 ● 出力のある、もろもろの関数は、この関数に依 存している。
  • 20. var_dump() だって!! ● 型も表示してくれるぞ! ● (ブラウザの場合 echo.js のロード必須) ● なんだ。。 PHP はやっぱり JSON でできていた んじゃないか? そうに違いない。(PHP勉強会72 回 中野さんの JSON Schema の説明参照 http://www.slideshare.net/hinakano/json- schema)
  • 21. var_dump() さん ひょっとして console.log() さ んより便利なんじゃないか ● 使いどころ間違えなきゃ便利なんじゃないか。 ● 関数の中身も toString() しておっぴろげてくれ るぞ!! ○ なお、本家PHPで同じようなことやると Closure#1 の ようにしか表示されない ● なお、 node.js の util.inspect() は、そ のままだと [Function] としか出してくれない模 様。
  • 22. urlencode() だってPHP基準? ● 闇PHP勉強会 の @co3k さんの資料参照 (http://www.slideshare.net/ebihara/php- 32340906) ● php.js の urlencode() は空白は + に置き換 え、~ はエンコードしない模様。 ● rawurlencode() もあるよ。
  • 23. file_get_contents() はデフォルトで “同期処理” でコンテンツ取得 ● file_get_contents(“test”); とやると、 XHR (XmlHttpRequest) でのコンテンツ取得を 行う。 ● デフォルトでは同期処理。 ○ つまり、これ使うと一旦処理がとまるよ! ● 非同期処理を 第3引数 context で行うことがで きる。 ○ 本家は、header 周りとかの制御につかったりする。
  • 24. なお非同期 file_get_contentns() file_get_contents('data', false, { stream_params: { 'phpjs.async': true, notification: function(code, severity, msg, st, bt) { if (code >= 8) { var_dump(this.responseText); } } } }); // こんなの PHP じゃないわ!!!! // file_get_contents() がついた JavaScript よ!!!! // だったら(コールバック関数を) 呼べばいいだろ!!
  • 25. (注意?) implode() は歴史的事情知らず ● さすがに例の順序逆も受け付ける仕様はは いってなかった。 ● 実装面倒だもんね。しょうがないよね。 php.implode(',', [‘Hello’, 'world']); // Hello,world php.implode([‘Hello’, ‘world’], ‘,’); // ,
  • 26. それでも物足りないあなた ● php.js は 325 の関数に対応 ○ 本家には 3,000 以上あるってよ。へー。 ● でも、そもそも JavaScript なんて書きたくな い! とにかくPHP が書きたいんだ! という人 (中毒者?) もいるかもしれない。 ● そこで、また別の php.js を紹介
  • 27. その2: php.js - PHP VM with JavaScript ● そもそも JavaScript 上で PHP を実行してしま えばいいんじゃないかという発想のモノ ● ブラウザで動くぞ!!! ● class も magic method もちゃんと動くぞ!! ● 関数も一部はサポートしている模様。 ● http://phpjs.hertzen.com/ ○ (ブラウザでデモができます)
  • 28. ブラウザで php.js VM を動かす <script src="PHP.js"></script> <script src="adapters/filesystem/xhr.js"></script> <!-- PHP.js と filesystem 用の adapter をロード --> <script> var opts = {}; opts.filesystem = new PHP.Adapters.XHRFileSystem(); var path = window.location.pathname; opts.SERVER = { SCRIPT_FILENAME: path.substring(0, path.length) }; var engine = new PHP(‘<?php echo “Hello”;’, opts); console.log(engine); console.log(engine.vm.OUTPUT_BUFFER); </script>
  • 29. node.js 上で php.js VM を動かす var fs = require('fs') ,content = fs.readFileSync('php.js', 'utf8') ; eval(content); var opts = { filesystem: fs, SERVER: { SCRIPT_FILENAME: 'file’ } }; var engine = new PHP('<?php echo "sample";', opts); console.log(engine.vm.OUTPUT_BUFFER);
  • 30. php.js VM の不思議 ● php_logo_guid() が実装されている ○ ロゴの guid を取得できるよ! ■ で、だからどうした。。 ■ ちなみに、隠し関数(?)の php_egg_logo_guid() もあるよ! ○ 【悲報】なお、本家側では、この関数は PHP5.5 で削除 された模様
  • 31. その3: PHP上でJavaScript を走らせる ● 逆に PHP上で V8 JavaScript Engine を利用し て JavaScript を実行することもできる。 ● http://www.php.net/manual/ja/book.v8js.php ● 使い道思いつかない!
  • 32. インストール方法 (Ubuntu) sudo apt-get install libv8js-dev # まだbeta なのだよ pecl install v8js-0.1.5 # アレ登録 sudo echo “extension=v8js.so” > /etc/php5/conf.d/v8js.ini
  • 33. コード <?php $v8 = new V8Js(); $JS = <<<JS var hello = function() { return "Hello!"; }; hello(); JS; try { var_dump($v8->executeString($JS, 'basic.js')); } catch (V8JsException $e) { var_dump($e); }
  • 34. まとめ ● あのPHPの関数が JavaScript でほしい / どう 実装するのか知りたい ○ php.js (http://phpjs.org/) ● そもそもPHPの構文をクライアントサイド上で動 かしたい ○ php.js VM (http://phpjs.hertzen.com/) ● JavaScript をPHP上で動かしたい (!?) ○ v8js module ○ だれか、これだ!っていう使い道を教えてくれ