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分)として発表しました。
PHP筋肉をつける
I want to get PHP muscle
2018-12-15 Japan PHP Conference
Kamata, Tokyo, Japan
#phpcon2018
お前誰よ
うさみけんた (@tadsan) / Zonu.EXE
待ってるにょ
趣味
趣味は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(´∀` )ワーイ ! | 何でもできるぞー
+ ヽ つ \____________
(⌒_ノ
し'ゝ ;;::⌒::
並列処理…
なんでもできる
とは言ってない
できないこと以外
なんでもできる
バックグラウンド
かけらに眠る
勇者の心…
Rubyを勉強してRailsに ジョブチェンジしました!
PHPつらたん
みたいな話は
結構よく聞く
Ruby最高、一番好
きなLispです
私は逆でRubyから PHPに入りました
PHP関係なく強い 人はたくさん居る
2014年当時の社内には
PHPが好きでPHPを極めてる
ような人はごく少数だった
PHP関係なく強い 人はたくさん居る
すくなくともPHPの
極意を伝授してくれる
ひとは居なかった
力が… 欲しい
なので2014年
くらいから
やってみた
契機
ちょっとAPI叩いて
ファイルに書き出すだけだしRubyで書
くか…
pixiv本体の一部だしPHPで
アッハイ…
なるほど…
PHPで書いた
力が… 欲しい
そのとき
作ったもの
メタプログラミング
サブコマンドが 作れるCLIツール
gitgitにしてやんよ
サブコマンド
||
とか
git diff git status
みたいに
第二引数の文字列によって
動きを変えるコマンド
Rubyでタスク定義
するなら
そのとき念頭にあった
Rake
Hash[]がない
IO/StringIOがない…
Rubyみたいに
メタプロるには…
メタプログラミング
うまくいった点
よっしゃ
Reflectionで
クラスの定義が
実行時に取れる
オプションごとに
ヘルプを
書きたかった
メタプログラミング
車輪の再発明
メタプログラミング
必要な機能を持っ たStringIOクラス
を作ってみる
継承関係はない
RubyのStringIOは実際の ファイルと紐付いてない がIOクラスと同じメソッ
ドを持つクラス
継承関係はない
このときは文字列をバッ ファ代りにしてポインタ を保持してシークするよ
うにした
php://temp
2018
でいいじゃん
new SplFileObject
第一引数にファイル名をとる
が、実は "
php://memory"
という文字列も渡せる
この仕様を知ったのは後だった
http://php.net/manual/ja/wrappers.php
そのあと
やったこと
http://php.net/
manual/ja/
信頼できる
情報源を知る
コードを読むとか仕様書 を読むとか、できるなら それに越したことはない
http://php.net/
manual/ja/
PHPマニュアル
JavaScript
HTML, CSS, JavaScript
MDN web docs
(Mozilla)
http://php.net/
manual/ja/
PHPマニュアル
を読む
http://php.net/
manual/ja/
載ってる関数を 実際使ってみる
http://php.net/
manual/ja/
配列関数
SPLイテレータ
PHPコードを
書く手数を増やす
read eval print loop
– –
Rubyだと
IRBがある
read eval print loop
– –
JavaScriptでもChrome
にコンソールがある
read eval print loop
– –
PHPだとどうすれば…
検索をすれば
いろいろあるけど
なんか作り込まれてる
PsySH
過去のPHPが比較
https://3v4l.org/
Rubyのsortと
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がそこま で好きじゃないこと
は知ってる
みんな違って
みんないい
方針を決められれば 手早く解決できる人 たちはいっぱい居る
知らないことは
調べる
だから創作活動が
好きな人は来てくれ
私からは
異常です