Page 1
PHP筋肉をつける
I want to get PHP muscle
2018-12-15 Japan PHP Conference Kamata, Tokyo, Japan #phpcon2018
公開日:
by USAMI Kenta@tadsan
に東京都大田区蒲田の大田区産業プラザ PiOで開催された『PHPカンファレンス2018』でライトニングトーク(5分)として発表しました。
I want to get PHP muscle
2018-12-15 Japan PHP Conference Kamata, Tokyo, Japan #phpcon2018
待ってるにょ
趣味
趣味はQiitaとphpusers-jaのSlackで困ってる人が居たら即レスすることです
💪
日々の筋トレのたまもの
<?php
💪
日本語でおk
PHP: Hypertext Preprocessor (or simply PHP)is a server-side scripting language designed for Web development, and also used as a general-purpose programming language.
インターネッツ
Web開発汎用言語
ヒト形決戦兵器
ボクのAA
++ + / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∧_∧ < わーいPHPだー! PHPだーbr(´∀` )ワーイ ! | 何でもできるぞー+ ヽ つ \____________(⌒_ノし'ゝ ;;::⌒::
並列処理…
なんでもできるとは言ってない
できないこと以外なんでもできる
バックグラウンド
かけらに眠る勇者の心…
PHPつらたんみたいな話は結構よく聞く
Ruby最高、一番好きなLispです
PHP関係なく強い人はたくさん居る2014年当時の社内にはPHPが好きでPHPを極めてるような人はごく少数だった
PHP関係なく強い人はたくさん居るすくなくともPHPの極意を伝授してくれるひとは居なかった
力が… 欲しい
なので2014年くらいからやってみた
契機
ちょっとAPI叩いてファイルに書き出すだけだしRubyで書くか…
なるほど…
力が… 欲しい
そのとき作ったもの
メタプログラミング
サブコマンドが作れるCLIツール
gitgitにしてやんよ
サブコマンド
||
git diff とか git statusみたいに第二引数の文字列によって動きを変えるコマンド
Rubyでタスク定義するなら
Hash[]がない
IO/StringIOがない…
Rubyみたいにメタプロるには…
メタプログラミング
よっしゃ
Reflectionでクラスの定義が実行時に取れる
オプションごとにヘルプを書きたかった
メタプログラミング
メタプログラミング
必要な機能を持ったStringIOクラスを作ってみる
継承関係はない
RubyのStringIOは実際のファイルと紐付いてないがIOクラスと同じメソッドを持つクラス
継承関係はない
このときは文字列をバッファ代りにしてポインタを保持してシークするようにした
2018
php://tempでいいじゃん
new SplFileObject
第一引数にファイル名をとるが、実は "php://memory"という文字列も渡せる
この仕様を知ったのは後だった
http://php.net/manual/ja/wrappers.php
そのあとやったこと
http://php.net/manual/ja/
コードを読むとか仕様書を読むとか、できるならそれに越したことはない
http://php.net/manual/ja/
JavaScript
HTML, CSS, JavaScript
MDN web docs(Mozilla)
http://php.net/manual/ja/
http://php.net/manual/ja/
http://php.net/manual/ja/
PHPコードを書く手数を増やす
read–eval–print loop
RubyだとIRBがある
read–eval–print loop
JavaScriptでもChromeにコンソールがある
read–eval–print loop
PHPだとどうすれば…
検索をすればいろいろあるけど
なんか作り込まれてる
過去のPHPが比較
Rubyのsortとsort!の違いはどう表現するか
<?php
$a = [4, 3, 1, 2];$b = $a;sort($b);// $a は変化なく $b だけがソートされる// Rubyで書くと b = a.sort
sort($a);// Rubyで書くと a.sort
こういう挙動を調べるとRubyのArrayとPHPの配列が全然別物だとわかってくる
read–eval–print loop
ほかの言語から拝借したものをPHPに持ち込んでどやってみる
http://php.net/manual/ja/
ほかの言語でできることを実現してみる
http://php.net/manual/ja/
一見役に立たなそうでもPHPの世界になかったものを実現できてしまった
http://php.net/manual/ja/
Rubyで特別に見えた機能Enumerable#lazy
http://php.net/manual/ja/
PHPのarray_mapと同じような機能だが、実行タイミングを必要になるタイミングまで遅らせられる
http://php.net/manual/ja/
実はPHPでは遙かに簡単に遅延評価mapが作れるとわかった
baguette/copipe-iter
他の言語に無根拠に羨ましがらなくなった
PHPは便利なのでEmacs LispからPHP関数を実行できるようにもした
まとめ
増井先生という人は「PHPの関数の数は人がWebでやりたいことの数」だと言った
隣の芝は青くない!俺たちの方が青い!
筋肉は自信!
同僚がPHPがそこまで好きじゃないことは知ってる
みんな違ってみんないい
方針を決められれば手早く解決できる人たちはいっぱい居る
知らないことは調べる
だから創作活動が好きな人は来てくれ
私からは異常です
