Submit Search
PHPとJavaScriptの噺
30 likes
17,013 views
Shogo Kawahara
1 of 34
Download now
Downloaded 30 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
More Related Content
What's hot
(20)
PDF
Php非同期の技法
Shogo Kawahara
PDF
Laravel 5.1 LTSでサービスを作る
infinite_loop
PPTX
今日から始めるLaravel
Masaru Matsuo
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
PDF
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
PDF
php開発で使うタスクランナー gulp
Yuuki Takezawa
PDF
Cake php + php unitによる実践的ユニットテスト
慶信 若松
PPTX
Behat Driven Development
Ryo Tomidokoro
PDF
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
PDF
フレームワークを使うべき 3 つの理由
Kenichi Mukai
PDF
Laravel / Lumen 次の一歩
Yuuki Takezawa
PDF
5分でわかる静的解析入門
Kenta USAMI
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
PDF
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Yuuki Takezawa
PPTX
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
PDF
はじめてLaravelさわった 第86回php勉強会
Osamu Kawasaki
PDF
TravisCI Nightに行ってきたので情報展開
Makoto Abe
PPTX
Jenkins tips 20161014
Hideaki Ishijima
Php非同期の技法
Shogo Kawahara
Laravel 5.1 LTSでサービスを作る
infinite_loop
今日から始めるLaravel
Masaru Matsuo
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
php開発で使うタスクランナー gulp
Yuuki Takezawa
Cake php + php unitによる実践的ユニットテスト
慶信 若松
Behat Driven Development
Ryo Tomidokoro
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
フレームワークを使うべき 3 つの理由
Kenichi Mukai
Laravel / Lumen 次の一歩
Yuuki Takezawa
5分でわかる静的解析入門
Kenta USAMI
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Yuuki Takezawa
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
はじめてLaravelさわった 第86回php勉強会
Osamu Kawasaki
TravisCI Nightに行ってきたので情報展開
Makoto Abe
Jenkins tips 20161014
Hideaki Ishijima
Similar to PHPとJavaScriptの噺
(20)
PPTX
PHP AV BINDING
Yo Ya
PDF
8時間耐久 PHP構築の教室
Yusuke Ando
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
KEY
php-timecopを実戦投入してみた
Yoshio Hanawa
PDF
Phpのレガシーコードをrubyで焼き変えてみた
Akira Kaneda
PDF
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
KEY
PHPエクステンションの開発tips
Yoshio Hanawa
PPT
20090801phpstudy Sanemat
Kenichi Murahashi
PDF
Arduino を PHP で制御する
Kenichi Ahagon
PDF
Webサーバ、HTML
Shuhei Iitsuka
PDF
あなたの安心を高速に守る Container-based CI
Wataru MIYAGUNI
PDF
PyPy 紹介
shoma h
PDF
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
ODP
20090704rubyist九州
koki_h
PDF
JIT for PHP を試した
y-uti
PDF
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
PDF
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
PDF
PSGIへの誘い
azuma satoshi
PHP AV BINDING
Yo Ya
8時間耐久 PHP構築の教室
Yusuke Ando
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
php-timecopを実戦投入してみた
Yoshio Hanawa
Phpのレガシーコードをrubyで焼き変えてみた
Akira Kaneda
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
PHPエクステンションの開発tips
Yoshio Hanawa
20090801phpstudy Sanemat
Kenichi Murahashi
Arduino を PHP で制御する
Kenichi Ahagon
Webサーバ、HTML
Shuhei Iitsuka
あなたの安心を高速に守る Container-based CI
Wataru MIYAGUNI
PyPy 紹介
shoma h
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
20090704rubyist九州
koki_h
JIT for PHP を試した
y-uti
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
PSGIへの誘い
azuma satoshi
Ad
More from Shogo Kawahara
(7)
PDF
東京から仙台まで歩く方法
Shogo Kawahara
PDF
Phpmatsuri2013
Shogo Kawahara
KEY
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
KEY
Composer
Shogo Kawahara
KEY
Sismoをいじくる
Shogo Kawahara
KEY
PHPの普段使わない関数を使う
Shogo Kawahara
PPTX
OAuth with OpenPNE3
Shogo Kawahara
東京から仙台まで歩く方法
Shogo Kawahara
Phpmatsuri2013
Shogo Kawahara
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
Composer
Shogo Kawahara
Sismoをいじくる
Shogo Kawahara
PHPの普段使わない関数を使う
Shogo Kawahara
OAuth with OpenPNE3
Shogo Kawahara
Ad
Recently uploaded
(9)
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
PPTX
色について.pptx .
iPride Co., Ltd.
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
色について.pptx .
iPride Co., Ltd.
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
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 へのバージョンアップ
3.
最近 ● サーバサイドでも JavaScript
書く人になった
4.
今日のテーマ JavaScript X PHP
5.
JavaScript X PHP
にまつわる噺 3本 1. JavaScript 上で PHP(的)な関数を走らせたい 2. JavaScript 上で PHP(っぽいもの) を走らせた い 3. PHP 上で JavaScript を走らせたい
7.
まってくれ そんなにバカ話じゃない ● その1 は実用的ですよ
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 (時間関連の処理を強力にサポート)
13.
慣れ親しんだ PHPの関数を使いたい
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 ○ だれか、これだ!っていう使い道を教えてくれ
Download