【PHP8.0】厳密なswitch文ことmatch式が使えるようになる
PHPがよく言われる問題点のひとつとして、switchが曖昧な比較であるということが挙げられます。switch($x){case1:'$xは1だよ';break;case"1":'$xは"1"だよ';break;}case "1"に到達することは決してありません。ということで厳密な比較を用いるswitchことmatch構文のRFCが提出されました。以下はMatch expression...
View Article【PHP8.0】PHPに名前付き引数が実装される
全ぺちぱーが待ち望んでいた機能がついに来まするよ。変な関数functionhoge($foo=null,$bar=false,$baz=0,$qux=''){}こんな関数があったとして、4番目の引数だけ変更したい、他はデフォルトのままでいいという場合、現在のPHPではいちいちデフォルト値を調べて与えないといけません。めんどうhoge(null,false,0,'fuga');この問題解決のために、こ...
View Article【PHP8.0】PHPにヌル安全オペレータが導入される
ユーザの住んでいる国を取得します。しかし、うっかりユーザがnullでした。どうなるでしょう。$user=null;echo$user->address->country??'';PHPのプロパティは元よりnull安全なので、存在しないプロパティだろうがnullだろうがプリミティブ型だろうがいきなりプロパティを取り出せます。取れない場合はE_NOTICEが発生しますが、??を使えば黙殺でき...
View Article【PHP8.0】非厳密な比較演算子`==`の挙動が今さら変更になる
推移律?そんなものはこの世の果てに置いてきた。PHP7"true"==0;0=="0";"true"=="0";結果は順にtrue、true、falseです。これがPHP7までの非厳密な比較(等価)演算子だったわけですが、まあおかしいよねってことで、この挙動がPHP8.0で変更になることになりました。よもや今さら基本中の基本である比較演算子の動作を弄ってくるとは思わなかったぞ。以下はSaner...
View Article【PHP8.0】PHP8.0の新機能
PHP8.0 / PHP7.42020/08/04にPHP8.0がフィーチャーフリーズしました。言語機能に関わるような機能の追加・変更が締め切られたということです。今後はデバッグを繰り返しながら完成度を高めていき、2020/12/03にPHP8.0がリリースされる予定です。というわけでPHP8.0で対応することが決まったRFCを見てみましょう。RFCJIT賛成50反対2で受理。...
View ArticleSafariは危険なJavaScriptに対応しない
先日Appleが、Safariは幾つかのWebAPIに対応しないと公言しました。日本語記事も幾つか出ています。しかし、どのサイトも対応しないAPIの一覧を並べてはいるのですが、それぞれのAPIが具体的にどのようなものなのかを記載した記事が見当たらなかったので、以下はそれらについて調べてみたものです。対応しない理由a threat to user...
View Article"HTTPヘッダ"が指すものとは
普段"HTTPヘッダ"と呼んでるものについて、仕様上は "header fields"と呼ぶらしかったり、自分でも整理できていなかった。今後もHTTP関連の仕様を読んでいく上でも理解しておきたかったので、この記事では、下記の用語について整理していくHTTP fieldheader/trailer fieldfiled lineHTTP...
View ArticleRFCを読んでヤマハルータのIPv6/v4フィルタ設定
RTX810のGUIから生成されるIPoEのフィルタに非常に簡潔で疑問を感じたので、RFC6092を参考にして設定を作ります。RFC 6092 Recommended Simple Security Capabilities in Customer Premises Equipment (CPE) for Providing Residential IPv6 Internet ServiceRFC...
View Article8進数も基数表示を明記したい
PHPの数値リテラルは、いくつかの基数をサポートしています。全部16$a=16;// 10進数$a=0x10;// 16進数$a=0b00010000;// 2進数$a=020;// 8進数8進数だけおかしくない?ということでExplicit octal integer literal notationというRFCが提出されました。Explicit octal integer literal...
View Articleアロー関数で複数行書けるようにしたいよねっていうプルリク
PHP7.4で導入された便利機能アロー関数、みんな使ってますか?私はあんまり。$x=1;$fn=fn($y)=>$x+$y;$fn(1);// 2$fn(10);//...
View ArticleRFCに準ずるメールアドレスの正規表現
"@"マークの前後で分けて定義しました。(= ユーザー名とドメイン名で分けて定義した)これで大体はカバーできているはず。ユーザー名の正規表現 = /^[-a-z0-9~#&'*/?`\|!$%^&*_=+}{\'?]+(\.[-a-z0-9~#&'*/?`\|!$%^&*_=+}{\'?]+)*$/; ドメイン名の正規表現 =...
View ArticlePHP8.0がリリースされたので新機能全部やる
2020/11/26にPHP8.0.0がリリースされました。ということで、UPGRADINGに載っている機能や変更点をだいたい全部見て回ることにします。Backward Incompatible Changes後方互換性のない変更。なお、ここで削除される機能の多くは何年も前から公知されています。PHPコアmatch is now a reserved keyword.matchが予約語になりました。...
View Article【PHP8】PHPに代数的データ型ほしくない? よし、まずは列挙型だ
PHPの開発者のひとり、Larry GarfieldがMLに列挙型のRFCを投稿しました。最近Ilija...
View ArticleHTTPの歴史と技術の変遷
この記事は Voicy Advent Calendar 2020の 23 日目の記事です。先日は, @yamageniiさんの Goでmainが実行される様子をもっと追ってみるでした。明日は, @saicologicさんの...
View Article【PHP8.1】プロパティ・引数デフォルト値でnewできるようになる
先日2021/03/02に、New in initializersというRFCが提出されました。 なにかというと、こんな構文が書けるようになります。 class Test { private $foo = new Foo(); public function __construct( private Logger $logger = new NullLogger, ){} } PHP RFC:...
View Article【PHP8.1】PHPで簡単に非同期処理を書けるようになる
PHPは長きにわたり同期的、すなわち、あらゆる処理を上から順に実行していくというスタイルを取ってきました。 しかしたとえば、複数のURLからデータを取ってきて結果をまとめたいといった場合、時間のかかるHTTPリクエストは同時に投げたいですよね。 この用途にはGuzzleというライブラリが存在し、これを使えば同時にリクエストを投げられます。...
View ArticleOAuth 2.0・OpenID ConnectでのEmbedded User-Agentの扱い
Googleは中間者攻撃対策として、OAuth 2.0のAuthorization RequestをEmbedded User-Agent(埋め込みブラウザ)を利用して実装することを禁止(ブロック)している。これに関連して、OAuth 2.0・OpenID Connect仕様やIDaaSのドキュメントを参考に、認可サーバー(IDプロバイダ)としてEmbedded...
View Article【PHP8.1】その配列、純粋配列?
PHPには配列と連想配列の区別がありません。 むしろPHPの配列は順序付きハッシュであり、その中でも数値のキーは特別に連番で扱える、みたいな扱いです。 他言語で言うところの配列はPHPにはありません。 $arr = [ 'hoge' => 'fuga', 'foo' => 'bar', 'x', // キーは0になる 3=>'y', 'z' // キーは4になる ];...
View Article【RFC8962】IETF、プロトコル警察を設立する
最近のプロトコルの乱れには目を覆いたくなるようなものがありますね。 そんなわけで、RFCを制定はすれど実装には不干渉を貫いてきたIETFも、ついに本腰を入れて動き出すことになりました。 以下はRFC 8962 Establishing the Protocol Policeの日本語訳です。 Establishing the Protocol Police Abstract...
View ArticleOpenID ConnectとOAuth 2.0の仕様とエンドポイント・パラメータ総まとめ(途中)
目的 OpenID Connect (略してOIDC) の活用方法を調べていて、たくさん存在している仕様文書に埋もれて迷子になってしまったので、自分用にまとめておきます。特に、エンドポイントごとに、どういったパラメータが存在しているのかは、一覧としてまとまっている物が 見当たらなかったので、 まとめてみました。時間をかけて少しずつ付け足して行ければと思います。...
View Article