SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
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 RFC
https://wiki.php.net/rfc
将来の PHP に向けた提案
◦ 提案して
◦ 議論して
◦ 投票して
◦ 実装して
◦ リリース!
2016-05-25 第102回 PHP 勉強会 3
PHP 7.1 では・・・
導入が決定している機能の一部を紹介
2016-05-25 第102回 PHP 勉強会 4
Generalize support
of 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 syntax
for array destructuring assignment
list を角括弧で書けたり
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 Same
var から 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 が使われているコードは
◦ 自動変換してはいけない
◦ 一つ一つ丁寧に修正すべき
といった様々な議論を経て・・・
投票結果
31
23 賛成
反対
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

Más contenido relacionado

La actualidad más candente

なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。
sasezaki
 
PHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend FramewrokPHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend Framewrok
sasezaki
 
phpcon2013_zf
phpcon2013_zfphpcon2013_zf
phpcon2013_zf
sasezaki
 

La actualidad más candente (20)

HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
 
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くPHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。
 
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
PHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend FramewrokPHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend Framewrok
 
phpcon2013_zf
phpcon2013_zfphpcon2013_zf
phpcon2013_zf
 

Destacado

5分でわかった気になるインセプションデッキ
5分でわかった気になるインセプションデッキ5分でわかった気になるインセプションデッキ
5分でわかった気になるインセプションデッキ
Takao Oyobe
 

Destacado (7)

Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発
 
プロジェクトを成功させるための期待マネジメント_中村洋_A-3
プロジェクトを成功させるための期待マネジメント_中村洋_A-3プロジェクトを成功させるための期待マネジメント_中村洋_A-3
プロジェクトを成功させるための期待マネジメント_中村洋_A-3
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
5分でわかった気になるインセプションデッキ
5分でわかった気になるインセプションデッキ5分でわかった気になるインセプションデッキ
5分でわかった気になるインセプションデッキ
 
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいの
 

Similar a RFC: "var" Deprecation

Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Yuta Ohashi
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
 

Similar a RFC: "var" Deprecation (20)

PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
第104回 php勉強会@東京 Laravel
第104回 php勉強会@東京 Laravel第104回 php勉強会@東京 Laravel
第104回 php勉強会@東京 Laravel
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーション
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
 
PHPの今とこれから2006
PHPの今とこれから2006PHPの今とこれから2006
PHPの今とこれから2006
 
Laravel5.1 Release
Laravel5.1 ReleaseLaravel5.1 Release
Laravel5.1 Release
 
20111029 rubyon php
20111029 rubyon php20111029 rubyon php
20111029 rubyon php
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
Fn project爆誕
Fn project爆誕Fn project爆誕
Fn project爆誕
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
Lightweight Language Diverプレゼン資料:アプリケーションのIPv6対応のススメ(LL編)
Lightweight Language Diverプレゼン資料:アプリケーションのIPv6対応のススメ(LL編)Lightweight Language Diverプレゼン資料:アプリケーションのIPv6対応のススメ(LL編)
Lightweight Language Diverプレゼン資料:アプリケーションのIPv6対応のススメ(LL編)
 

Más de y-uti

Más de y-uti (17)

潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法
 
Active Object
Active ObjectActive Object
Active Object
 
目で見る過学習と正則化
目で見る過学習と正則化目で見る過学習と正則化
目で見る過学習と正則化
 
ロジスティック回帰入門
ロジスティック回帰入門ロジスティック回帰入門
ロジスティック回帰入門
 
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
 
スパース推定
スパース推定スパース推定
スパース推定
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
逐次ベイズ学習 - サンプリング近似法の場合 -
逐次ベイズ学習 - サンプリング近似法の場合 -逐次ベイズ学習 - サンプリング近似法の場合 -
逐次ベイズ学習 - サンプリング近似法の場合 -
 
各言語の k-means 比較
各言語の k-means 比較各言語の k-means 比較
各言語の k-means 比較
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
Git 入門
Git 入門Git 入門
Git 入門
 
PHP5.3 を使うのはやめよう
PHP5.3 を使うのはやめようPHP5.3 を使うのはやめよう
PHP5.3 を使うのはやめよう
 
プログラマのための文書推薦入門
プログラマのための文書推薦入門プログラマのための文書推薦入門
プログラマのための文書推薦入門
 

Último

Último (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

RFC: "var" Deprecation

  • 1. RFC: "var" Deprecation 内山 雄司 (@y-uti) 2016-05-25 第102回 PHP 勉強会
  • 2. 自己紹介 内山 雄司 (@y__uti) ◦ http://y-uti.hatenablog.jp/ (phpusers-ja) 仕事 ◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています 興味 ◦ プログラミング言語処理系 ◦ 機械学習 2016-05-25 第102回 PHP 勉強会 2
  • 3. PHP RFC https://wiki.php.net/rfc 将来の PHP に向けた提案 ◦ 提案して ◦ 議論して ◦ 投票して ◦ 実装して ◦ リリース! 2016-05-25 第102回 PHP 勉強会 3
  • 5. Generalize support of negative string offsets 文字列のオフセットに負の値を指定できたり 2016-05-25 第102回 PHP 勉強会 5 <?php $str = 'abcde'; echo $str[-2] . "¥n"; // 実行結果 // d ◦ 賛成 28 票 vs 反対 0 票
  • 6. 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 票
  • 7. Square bracket syntax for array destructuring assignment list を角括弧で書けたり 2016-05-25 第102回 PHP 勉強会 7 <?php [$a, $b] = [3, 4]; echo "$a, $b" . "¥n"; // 実行結果 // 3, 4 ◦ 賛成 41 票 vs 反対 0 票 待ち遠しいですね! PHP 7.1 は 12 月頃にリリース予定
  • 8. RFC: "var" Deprecation 賛否が分かれる RFC の議論は面白い 2016-05-25 第102回 PHP 勉強会 8
  • 9. "var" クラスのプロパティを定義するキーワード 2016-05-25 第102回 PHP 勉強会 9 class Hoge { var $fuga; } http://php.net/manual/ja/language.oop5.properties.php
  • 10. 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
  • 11. 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 を意訳)
  • 12. Cons (反対する立場の主張) 壊れていない ◦ var に問題はない。緊急性がない 後方互換性を失う (BC break) ◦ var を使うコードが動かなくなる ◦ BC breaks を軽んじてはいけない 機能的な恩恵がない ◦ 開発者に何の新機能ももたらさない ◦ var を使っていない人は関係ない ◦ var を使っていた人は対応が必要 var と public は同じではない ◦ 開発者の意図が違う可能性 2016-05-25 第102回 PHP 勉強会 12 (RFC を意訳)
  • 13. "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 での議論を私なりに解釈)
  • 14. "public" is Not The Same var から public への一括変換はコードの品質を落とす 品質不明なコードにこう書いてあったら 2016-05-25 第102回 PHP 勉強会 14 (php-internals での議論を私なりに解釈) class Hoge { var $fuga; } ◦ "var" という記述を見て「コードの臭い」に気がつく ◦ この $fuga は public なのか private なのか・・・ ◦ もしかすると static 変数かも? ◦ 適切なアクセス修飾子に置き換える
  • 15. "public" is Not The Same 機械的に一括変換してしまったら 2016-05-25 第102回 PHP 勉強会 15 (php-internals での議論を私なりに解釈) class Hoge { public $fuga; } ◦ もう「コードの臭い」に気づくのは難しい ◦ この $fuga が実は private とか考えるだけでツライ だから今現在 var が使われているコードは ◦ 自動変換してはいけない ◦ 一つ一つ丁寧に修正すべき といった様々な議論を経て・・・
  • 16. 投票結果 31 23 賛成 反対 2016-05-25 第102回 PHP 勉強会 16 2/3 の賛成が必要
  • 17. RFC: "var" Deprecation 2016-05-25 第102回 PHP 勉強会 17 Declined var は今後も残されることになりました
  • 18. まとめ RFC を読んでみよう ◦ 今後の PHP の新機能を先取りできる RFC の議論も読んでみよう ◦ プログラミング言語の開発者がどんなことを考えているのか分かる 2016-05-25 第102回 PHP 勉強会 18