Page 1
Language Update 2018
PHP
<?php
2018-08-26 Learn Languages 2018
#ll2018
公開日:
by USAMI Kenta @tadsan
Language Update 2018
PHP
<?php
2018-08-26 Learn Languages 2018
#ll2018
お前誰よ
うさみけんた (@tadsan) / Zonu.EXE
言語的なバックグラウンド
2004年頃: ISO-HTML
<?php
みんな大好きPHP
ですよね?
(暗黒微笑)
リアルワールドでのシェア の割にプログラミング言語
として興味関心の対象と してる人は多くない印象
😇
“We have things like protected properties.
We have abstract methods. We have all
this stuff that your computer science
teacher told you you should be using.
I don't care about this crap at all.”
–Rasmus Lerdorf
https://en.wikiquote.org/wiki/Rasmus_Lerdorf
には プロパティも抽象メ
“PHP protected
ソッドもありますよ。計算機科学の教授が
「使え」と言ってるものは全部。
そんなことはクソ興味ないですけど
”
–Rasmus Lerdorf
原作者のRasmusはプロ グラミング言語の設計 にはあまり関心がない
おしながき
1. PHPの開発体制
2. 言語としての特徴 3. 最近の動向と「次」
PHPの
開発体制
Rasmusは「最初の開発者」 であってGuidoやMatzの
ようなBDFLではない
(Wikipediaの一覧には載ってるけど…)
機能追加や改廃はRFCに まとめられMLで議論され た後にコミッターによる
投票で決まるプロセス
https://wiki.php.net/rfc/voting
PHPの行く末を
知りたければRFCを ウォッチすればよい
https://wiki.php.net/rfc
https://php-rfc-watch.beberlei.de/
https://wiki.php.net/rfc
言語としての
特徴
Webアプリを最も
ゆるふわ簡単に 構築できる言語
昔ながらのCGIと同じく
レンタルサーバー借りて
ファイルを置けば設置完了
現在ではレン鯖にFTPで転送とか よりHerokuにgit pushした方が
ずっと簡単じゃね?
と僕も思ってるけど、PHPが利用
される界隈的にそこまで主流の 選択肢とはされない感じがある
PHPは様々な
要素を併せ持つ
1. HTMLテンプレート
2. PerlっぽいCGI
3. Javaっぽいクラス
には プロパティも抽象メ
“PHP protected
ソッドもありますよ。計算機科学の教授が
「使え」と言ってるものは全部。
そんなことはクソ興味ないですけど
”
–Rasmus Lerdorf
ほかの言語にあるよ
うな機能は概ねある 計算機科学の教授が使えと言ってるものは全部
全部とは言ってない↑↑↑
抽象クラス, トレイト, インターフェ
イス, ジェネレータ, イテレータ, クロー
ジャ, 函数の動的呼び出し, 無名クラ ス, eval, 型宣言, 連想配列, リフレク ションAPI, 自己文書化, 標準入出力の 読み書き, REPL, クラスの遅延ロード
イテレータ・ジェネレータ
foreachでイテレーションできる
モノをユーザー定義で作れる
ストリーム も
(遅延リスト・無限リスト)
当然扱える
創意工夫でかなりの使いでがある
トレイト (trait)
継承なしでクラスに実装追加できる 複数トレイトの衝突を解決できる
優先順位の定義・メソッド名変更
つまり「本物の」トレイトの実装
Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Andrew P. Black(2002)
Traits: Composable Units of Behaviour
クラスの遅延ロード
実行時に未定義クラスが登場したと きにファイルを読み込むロジックを
ユーザー定義できる
いちいちrequire_onceを書かない 不必要なファイルが読み込まれない
AOP メタプログラミングの温床
Composerを利用するのが鉄板構成
最近の動向
PHP7.0は12月1日前後に リリースされるスケジュー
ルで概ね固定されてる
http://php.net/supported-versions.php
2年間のメンテと
1年間のセキュリティ修正
大事な
お知らせです
2004年から長らくご愛顧いた だいだきましたPHP5.xの公式
サポートは2018年をもって
完全に終了いたします。
(5.6のSecurity fixes終了)
ついでにPHP7.0の
Security fixesも12月3日に 終了するので7.1または7.2系 にアップデートしましょう。
あくまでThe PHP Groupから のリリースの話なので、脆弱性 が出たら各ディストリ独自のアッ プデートがあると思いますが。
ご安全に。
最近の動向
(言語コア)
PHP 5.6→ 7.0
これは内部構造の
最適化と型宣言の
追加が目玉
http://d.hatena.ne.jp/hnw/20160828
PHP 7.1以降
微妙に書きにくかった
文法の修正と危険な機能 の非推奨化 が中心
(削除)
PHP 7.1
nullableの追加
函数戻り値にvoidが書けるように
配列分解の短縮構文
クラス定数に可視性を定義可能に
private const
PHP 7.2
型宣言にobjectが書けるように
継承時にメソッドの型宣言を省略可 クラスのグループ表記ケツカンマ可
PHP 7.3 (12月リリース予定)
7月にfeature freezeされ現在beta2
函数呼び出し引数のケツカンマ可 ヒアドキュメント/nowdocの改善
終端行判定がシビアだったのが緩和
行頭空白をトリムできるように
PHP 7.4?
PHP 7.4
typed propertyが入る…かも(議論中)
これは比較的確度高そう
Fiberが入る… かも(議論中)
PHPで非同期処理は伝統的に鬼門 取り込まれるまでハードル高そう
PHP 8?
PHP5時代の負債っぽい仕様は一掃?
臆測です
JITが入る…?
ほんとにうまくいくの?
ローカル変数の型付け?
typed propertyの流れで視野内
最近の動向
(関連コミュニティ)
PHPカンファレンスは活発
2018年はPHPコミュニティ・カンファ
レンスが活発化した一年だった
iOSDC主宰の長谷川さん(@tomzoh) がPHPカンファレンスと別にPHPer
Kaigiを開催してコミュニティに火
をつけた
各地域のCFP応募数が倍増した
2018年のPHPカンファレンス
2019年は既に例年以上の開催告知
PHPerKaigi 2019
地域: 福岡/仙台 /札幌
(New!)
フレームワーク: CakePHP, Laravel
PhpStormの普及
JetBrains社のPHP(+WEB)専用IDE 静的解析機能がめっちゃ強い
※
(PHP比)
入力補完やエラー表示が強い 簡単な型推論はしてくれる
PHPDocの型記述を読んでくれる
リファクタリング機能がある
PHPと静的解析
PhpStorm登場以前は単純なコードの スタイルや複雑度を検査するものが
多かった
PhpStorm以後は変数のスコープや 静的な型検査をベースにチェックで
きるツールが増えた
Phan, PHPStan, Psalm
PHPDocの現状
ポピュラーなライブラリやフレーム ワークはPHPDocが整備されてるので、 PhpStormを入れるだけで十分補完が
機能する状態
一方で仕様の標準化と実装は難航
PhpStormがPSR-5入れてくれない IntersectionType 入りそう
(非標準)
並列処理・非同期処理
PHPでは実行モデル的に鬼門
↑情報科学の教授に怒られそう
それを解決しようとする動きがある
Swoole
https://www.swoole.com/
Fiber(RFC)
https://wiki.php.net/rfc/fiber
PHP-Promise(ext)
https://github.com/php-promise/promise
書籍
あんまり景気よくなさそう
初心者向けの入門書は結構出てる
最新のモダンな開発事情を伝える
ものはずっと出てない
パーフェクトPHPは2014年
いまがんばって企画書を書いてます
まとめ
PHPの活用領域
は多様
言語としては従来の 「負債」を解消する
方向の変更が多い
PHPを継続的に静的解析できる 環境が既に揃ってるので既存プ ロジェクトの改善や新規開発の
効率化の大きな武器になる