rfc: "var" deprecation
TRANSCRIPT
RFC: "var" Deprecation内山 雄司 (@y-uti)
2016-05-25 第102回 PHP 勉強会
自己紹介内山雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味◦ プログラミング言語処理系
◦ 機械学習
2016-05-25 第102回 PHP 勉強会 2
PHP RFChttps://wiki.php.net/rfc
将来の PHP に向けた提案◦ 提案して
◦ 議論して
◦ 投票して
◦ 実装して
◦ リリース!
2016-05-25 第102回 PHP 勉強会 3
PHP 7.1 では・・・導入が決定している機能の一部を紹介
2016-05-25 第102回 PHP 勉強会 4
Generalize supportof negative string offsets文字列のオフセットに負の値を指定できたり
2016-05-25 第102回 PHP 勉強会 5
<?php
$str = 'abcde';echo $str[-2] . "¥n";
// 実行結果
// d
◦ 賛成 28 票 vs 反対 0 票
Support Class Constant Visibilityクラスに private な定数を定義できたり
2016-05-25 第102回 PHP 勉強会 6
<?php
class Hoge {private const fuga = 10;
}
echo Hoge::fuga . "¥n";
// 実行結果
// PHP Fatal error: Uncaught Error: Cannot access private const// Hoge::fuga in /home/y-uti/test.php:7
◦ 賛成 28 票 vs 反対 2票
Square bracket syntaxfor array destructuring assignmentlist を角括弧で書けたり
2016-05-25 第102回 PHP 勉強会 7
<?php
[$a, $b] = [3, 4];
echo "$a, $b" . "¥n";
// 実行結果
// 3, 4
◦ 賛成 41 票 vs 反対 0 票
待ち遠しいですね!PHP 7.1 は 12 月頃にリリース予定
RFC: "var" Deprecation賛否が分かれる RFC の議論は面白い
2016-05-25 第102回 PHP 勉強会 8
"var"クラスのプロパティを定義するキーワード
2016-05-25 第102回 PHP 勉強会 9
class Hoge {
var $fuga;
}
http://php.net/manual/ja/language.oop5.properties.php
RFC: "var" Deprecation提案内容◦ PHP 7.1 で varを廃止予定 (deprecated) にしよう
◦ PHP 8.0 で varを廃止 (its functionality removed) しよう
提案者◦ Colin O'Dell 氏
経緯◦ [2016-02-18] php-internals ML に投稿
◦ http://marc.info/?l=php-internals&m=145582267616585&w=2
◦ [2016-03-10] RFC 作成
◦ https://wiki.php.net/rfc/var_deprecation
2016-05-25 第102回 PHP 勉強会 10
Pros (賛成する立場の主張)
重複する機能を除去できる◦ varと public は同じ。片方でよい
public の方が広く使える◦ public static と書けるが varはダメ
◦ ちなみに 7.1 以降は public constとも書ける
今なら長い移行期間を取れる◦ PHP 8 のリリースは恐らく数年先
◦ 移行するのに十分な余裕がある
簡単に移行できる◦ varを public に変換すれば動く
◦ 変換スクリプトが提供された
レガシーな機能を除去できる◦ varは PHP 4 のレガシーな機能
◦ メジャーリリースでレガシーな機能を除去することは前例もある
既にあまり使われていない◦ varが使われているのは 4 ~ 8%
◦ Packagistの上位 10,000 パッケージ中
2016-05-25 第102回 PHP 勉強会 11
(RFC を意訳)
Cons (反対する立場の主張)
壊れていない◦ varに問題はない。緊急性がない
後方互換性を失う (BC break)◦ varを使うコードが動かなくなる
◦ BC breaks を軽んじてはいけない
機能的な恩恵がない◦ 開発者に何の新機能ももたらさない
◦ varを使っていない人は関係ない
◦ varを使っていた人は対応が必要
varと public は同じではない◦ 開発者の意図が違う可能性
2016-05-25 第102回 PHP 勉強会 12
(RFC を意訳)
"public" is Not The Same開発者が "public" と書いたら
2016-05-25 第102回 PHP 勉強会 13
class Hoge {public $fuga;
}
◦ この開発者は $fugaが public プロパティだと意図したに違いない
開発者が "var" と書いた場合
class Hoge {var $fuga;
}
◦ この開発者は $fugaが public プロパティだと意図しただろうか?
◦ たぶん No.
(php-internals での議論を私なりに解釈)
"public" is Not The Samevarから public への一括変換はコードの品質を落とす
品質不明なコードにこう書いてあったら
2016-05-25 第102回 PHP 勉強会 14
(php-internals での議論を私なりに解釈)
class Hoge {var $fuga;
}
◦ "var" という記述を見て「コードの臭い」に気がつく◦ この $fugaは public なのか private なのか・・・
◦ もしかすると static 変数かも?
◦ 適切なアクセス修飾子に置き換える
"public" is Not The Same機械的に一括変換してしまったら
2016-05-25 第102回 PHP 勉強会 15
(php-internals での議論を私なりに解釈)
class Hoge {public $fuga;
}
◦ もう「コードの臭い」に気づくのは難しい◦ この $fugaが実は private とか考えるだけでツライ
だから今現在 varが使われているコードは◦ 自動変換してはいけない
◦ 一つ一つ丁寧に修正すべき
といった様々な議論を経て・・・
投票結果
3123 賛成
反対
2016-05-25 第102回 PHP 勉強会 16
2/3 の賛成が必要
RFC: "var" Deprecation
2016-05-25 第102回 PHP 勉強会 17
Declined
varは今後も残されることになりました
まとめRFC を読んでみよう◦ 今後の PHP の新機能を先取りできる
RFC の議論も読んでみよう◦ プログラミング言語の開発者がどんなことを考えているのか分かる
2016-05-25 第102回 PHP 勉強会 18