Closed26

学習記録#10 250608

ろみぃ(konatsu)ろみぃ(konatsu)

WpOrg\Requests\Requestsのget()とかpost()は、同じクラスのrequest()っていうメソッドを呼んでる

ろみぃ(konatsu)ろみぃ(konatsu)

request()の中では、最初にバリデーションチェックとかオプションのチェックをしてる
InputValidatorとかInvalidArgumentは何者?

ろみぃ(konatsu)ろみぃ(konatsu)

InputValidatorはis_string_or_stringable()とかis_numeric_array_key()みたいな型チェックてきなメソッドが実装されてる

ろみぃ(konatsu)ろみぃ(konatsu)

is_numeric_array_key()はHooks.phpで使われてる
なんでrequest()だとis_string_or_stringable()ではHooksのregister()はis_numeric_array_key()なんだ?

ろみぃ(konatsu)ろみぃ(konatsu)

あ、よく見たらHooksの方は$priorityっていう変数で数値しか受け付けたくないからそうなってるだけか

で、requestがis_string_or_stringable()だけでいいのは、単純にresuqestで渡ってくるのは全部文字列になるからかな

ろみぃ(konatsu)ろみぃ(konatsu)

$options['hooks']->dispatch()のところ、個人的には
$options['hooks'] instanceof Hooksとかを先に入れたくなっちゃう
$optionsって人が['hooks'=>'hogehoge']って書ける部分だから、、

ろみぃ(konatsu)ろみぃ(konatsu)
if (!empty($options['transport'])) {
    $transport = $options['transport'];

    if (is_string($options['transport'])) {
        $transport = new $transport();
    }
} else {
    $need_ssl     = (stripos($url, 'https://') === 0);
    $capabilities = [Capability::SSL => $need_ssl];
    $transport    = self::get_transport($capabilities);
}

ここが何やってるかピンとこない

ろみぃ(konatsu)ろみぃ(konatsu)

ChatGPT曰く、

これは「HTTP通信に使う“トランスポート層(Transport)”を選ぶ処理」です。

とのこと。

何か指定されてたらそこを選んで、指定がなければSSLが必要か判定して、self::get_transportで判定結果に基づく最適なトランスポート層を選択してる感じ

トランスポート層とは
https://zenn.dev/link/comments/c6beb3b7bb33a5

ろみぃ(konatsu)ろみぃ(konatsu)

new $transport()は、$transportがWpOrg\Requests\Transport\Curlみたいなクラス名の文字列だった場合にインスタンス化してる

ろみぃ(konatsu)ろみぃ(konatsu)
ろみぃ(konatsu)ろみぃ(konatsu)

実際にどんなエラーが出るかやってみた

reinventing_the_wheel_model_php  | PHP Learning Environment is running!
reinventing_the_wheel_model_php  | Fatal error: Uncaught WpOrg\Requests\Exception\InvalidArgument: App\Sample\InvalidArgumentSample::test(): Argument #1 (email) must be of type string, integer given in /var/www/vendor/rmccue/requests/src/Exception/InvalidArgument.php:29
reinventing_the_wheel_model_php  | Stack trace:
reinventing_the_wheel_model_php  | #0 /var/www/src/Sample/InvalidArgumentSample.php(13): WpOrg\Requests\Exception\InvalidArgument::create(1, 'email', 'string', 'integer')
reinventing_the_wheel_model_php  | #1 /var/www/public/index.php(47): App\Sample\InvalidArgumentSample->test()
reinventing_the_wheel_model_php  | #2 {main}
reinventing_the_wheel_model_php  |   thrown in /var/www/vendor/rmccue/requests/src/Exception/InvalidArgument.php on line 29
reinventing_the_wheel_model_php exited with code 255

どのクラスのどの関数でどんなエラーになったかを返してくれてる

ろみぃ(konatsu)ろみぃ(konatsu)

トランスポート層とは、コンピュータネットワークの通信モデル(OSI参照モデル)における第4層のこと

名称 役割の例
7 アプリケーション層 HTTP, SMTP, FTPなど
6 プレゼンテーション層 文字コード変換、暗号化など
5 セッション層 通信セッションの開始・終了
4 トランスポート層 TCP/UDPによるデータの信頼性確保、順序制御、再送制御など
3 ネットワーク層 IPアドレス、ルーティング(IP)
2 データリンク層 MACアドレス、イーサネット
1 物理層 電気信号、光信号などの物理的な転送手段
このスクラップは3ヶ月前にクローズされました