More Related Content
PDF
PDF
PPTX
PHP x AWS でスケーラブルなシステムをつくろう PDF
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai PDF
PDF
PPTX
Re: WebServer BenchMarking PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS What's hot
PDF
PDF
PPTX
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情 PDF
PDF
PDF
Cake php + php unitによる実践的ユニットテスト PPTX
PDF
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった PDF
PDF
PDF
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料 PDF
Laravel_オープンソースカンファレンスhokkaido_JP_2014 PPTX
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015 PDF
はじめてLaravelさわった 第86回php勉強会 PDF
TravisCI Nightに行ってきたので情報展開 PPTX
Similar to PHPとJavaScriptの噺
PDF
PHPの今とこれから2024 at PHP Conference Japan 2024 PDF
Modern PHP Programming @ PFI Seminar PDF
PDF
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜 PPTX
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス) PDF
PDF
PDF
Phpcon tokyo 20120_bigginer PDF
PDF
PDF
PPTX
PPTX
PHPCON_TOKYO_2022_Bigginer.pptx PDF
お前は PHP の歴史的な理由の数を覚えているのか PDF
PDF
PDF
PDF
PDF
More from Shogo Kawahara
PDF
PDF
KEY
Composer による依存管理 と Packagist によるライブラリの公開 KEY
KEY
KEY
PPTX
Recently uploaded
PDF
Qitta NotebookLM Sample Slide #1 NotebookLMで60ページ超の登壇スライド作成してみた PDF
BLEタグと広域LoRaWAN無線ネットワーク・インテグレーションガイド- Dragino BLE-LoRaWANハブ BH01 PDF
Qitta NotebookLM Sample Slide #5 NotebookLMで60ページ超の登壇スライド作成してみた PDF
AI Vision: Innovation through next-generation vision technology PDF
Qitta NotebookLM Sample Slide #1 NotebookLMで60ページ超の登壇スライド作成してみた PDF
Qitta NotebookLM Sample Slide #7 NotebookLMで60ページ超の登壇スライド作成してみた PDF
Qitta NotebookLM Sample Slide #4 NotebookLMで60ページ超の登壇スライド作成してみた PDF
Qitta NotebookLM Sample Slide #3 NotebookLMで60ページ超の登壇スライド作成してみた PDF
Qitta NotebookLM Sample Slide #2 NotebookLMで60ページ超の登壇スライド作成してみた PDF
AgentCoreで実現するマルチテナントAIエージェント PDF
Qitta NotebookLM Sample Slide #6 NotebookLMで60ページ超の登壇スライド作成してみた PDF
ネットワーク分析による 理学療法推論の可視化 ---教育支援のためのシステム開発に向けて--- PDF
Qitta NotebookLM Sample Slide #8 NotebookLMで60ページ超の登壇スライド作成してみた 完成 PHPとJavaScriptの噺
- 1.
- 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
へのバージョンアップ
- 3.
- 4.
- 5.
JavaScript X PHPにまつわる噺 3本
1. JavaScript 上で PHP(的)な関数を走らせたい
2. JavaScript 上で PHP(っぽいもの) を走らせた
い
3. PHP 上で JavaScript を走らせたい
- 7.
- 8.
その1: JavaScript でPHP(的)な関数を
使いたい
● PHPer のみなさん! こんな経験ありませんか?
○ ようし! クライアントサイド/サーバサイド な JavaScript
書くぞーー
○ あれ、PHPで便利にできるアレ、JavaScript でどうやる
んだ???
○ strtotime(), array_*(), rawurlencode(),
htmlspecialchars() もなしにワシはどう開発すればいい
んじゃ。
- 9.
array_merge() っぽいことを
js でやるには
varmerge = function(obj1, obj2) {
obj2 = obj2 || {};
for (var name in obj2) {
obj1[name] = obj2;
}
};
// なんか関数をつくらなきゃいけない
// PHP のように渡した値が変更されないようにするには、オブ
ジェクトのclone を実装する必要がある
- 10.
strtotime() っぽいことを
js でやるには
varstrtotime = function(str) {
var date = new Date(str);
return Math.round(date.getTime() / 1000);
};
// これは超適当実装です。一部ブラウザは対応し
ないかも
// ほかにも +2days とか実装したいとか思ったらよ
り至難の業
- 12.
- 13.
- 14.
- 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 上での使い方
● npminstall 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.
- 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.jsVM を動かす
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-getinstall libv8js-dev
# まだbeta なのだよ
pecl install v8js-0.1.5
# アレ登録
sudo echo “extension=v8js.so” >
/etc/php5/conf.d/v8js.ini
- 33.
コード
<?php
$v8 = newV8Js();
$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
○ だれか、これだ!っていう使い道を教えてくれ