学習記録#16 250615

この続き

Iriが何かChatGPTに聞いてみた
IRI(アイアールアイ)は、**Internationalized Resource Identifier(国際化リソース識別子)**の略で、簡単に言えば 「国際文字(日本語など)も使えるURL」 です。
URLにはASCII文字しか使えないようになってるけど、Iriは漢字とかハングルとかも使えるってことらしい

time()について
現在の Unix タイムスタンプを返す
現在時刻を Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。
date()は使ったことあったけど、time()もあったんや、、

Cookieクラスの$reference_timeって変数は何で使うんだろうか

名前的にはサイドに参照された日時を持ってそうだけど、何かに使うの?

ずっと__toString()
みたいな__何ちゃら()
系の関数でアンダーバー2個使ってる理由が気になってたので調べてみる

PHPが提供するマジックメソッドには頭に必ずアンスコ2個が付くルールがあるらしい。勝手にアンスコ2個が頭に来る関数や変数を作ってはいけない

となると、Cookieクラスで
public function __toString() {
return $this->value;
}
ってしてるのは、__toStringをオーバーライドしてるってことかな

Auth.phpとHookManager.phpの命名規則はどう言うことなんだろうか
(どっちもインターフェース)

まあ、Authの方はimplementsしてるのがBasic.phpで、HookManager.phpの方はHooks.phpだから、前者は特にインターフェースであることを名前で示す必要がなくて、後者はManager
ってつけることでインターフェースであることをわかりやすくしてるって感じ?

dispatchの意味をあんまり知らずに使ってたけど、送るとか割り振るって意味があるのか

Hooksのこと、ぼんやりしか知らないかもなと気づく

何らかの処理をトリガーにして、そこに別の処理を差し込むものというイメージ
仕組みとかはわかってない
でも、Hooks.phpの中身を見る感じ、何かコールバック関数を用意して、それを実行させてるイメージなのかな

ある処理と処理の間に割り込んで別の処理を実行する仕組み。
この割り込みで実行する処理が、その前の処理と次の処理にちゃんと繋がるようになってたら、何事もなかったかのように動くよねって感じ?

IdnaEncoder.phpはいよいよ全然知らん名前かも
Idnaがわからない。聞いたことはある、かも、、

Internationalizing Domain Names in Applications
の略
IDN(国際ドメイン名)を扱うための技術機構のこと
なるほど、、?

IDNA(アイディーエヌエー)
Internationalizing Domain Names in Applicationsの略称。
国際化ドメイン名のアーキテクチャーと処理手順を規定しています。 具体的には、国際化ドメイン名対応のアプリケーションプログラム内部において、文字列の正規化(NAMEPREP)とASCII互換エンコーディング(Punycode)変換の処理を行うとしています。

とにかく、文字列の正規化とASCII互換エンコーディングをしているのね

あ、ほんとだ
public static function encode($hostname)
って関数がある。ホスト名をエンコードしてる

ASCII文字かどうか判定するメソッドとか、ASCII文字に変換するメソッドが実装されてる

nameprepとは
NAMEPREP(ネームプレップ)
A Stringprep Profile for Internationalized Domain Namesの略称。
国際化ドメイン名にSTRINGPREPを適用するための規定です。アプリケーション内部でドメイン名として処理するに際しては、適切な正規化処理が必要であるため、この規定が定められています。

Iriクラス、いろんなところで使われてるけど、中身見ても結局何してるんかあんまりわからんかも

__setは、引数の$name
で指定したIriのプロパティに対して$valueを挿入するだけか
__getはその逆

あ、他のPHP関数をオーバーライドしてるメソッドも大体そんな感じかも
大体引数に$name
がある

それ以外のメソッドは、大体メソッド名の通りなはず
ちょっと理解が進んだ気がする

strspn
指定したマスク内に含まれる文字からなる文字列の最初のセグメントの長さを探す

if (strspn($port, '0123456789') === strlen($port))
は、$portが1文字の整数だけを持つ変数かどうかチェックしてる

SslクラスのsubjectAltNameってなんだ?

SAN(サン、Subject Alternative Name)
サーバー証明書のSubjectAltNameフィールドを指します。
証明書に関連付ける実体(entity)を記述するSubjectフィールドの情報を追加・置き換える形で、識別子を複数記述できます。

サーバー証明書の確認をしてるって感じ

Sslのverify_reference_name()ってどういう目的で使う?

reference_name=ホスト名が正しいかどうかを検証してるっぽい
reference_nameがホスト名ってのが知らなかったな

Exceptionディレクトリに、用途別でいろんな例外クラスがある、、やっぱり、これくらい分けてエラーハンドリングした方がいいんだろうな

Transportディレクトリは、通信の変換をやってそうだからCurlとかが入ってるんだろうと思って開けたら、ちゃんとCurl.phpとFsockopen.phpが入ってた。知識がつくと予測できるようになる

Utilityディレクトリの中が全然知らない子だ、、

CaseInsensitiveDictionaryはCookieのattributesプロパティの型だったり(CaseInsensitiveDictionaryの配列)、Headersが継承してたり、Fsockopenでも使われたりしてる

FilteredIteratorはFsockopenで使われてる

InputValidatorは知ってる子だった!
最初の方でInvalidArgumentで使われてるの見てたわ
型チェックをする処理がまとまってるクラス