プログラミング始めて1か月の超初心者がPHP7技術者認定初級試験を受けてみたで学んでいた初めてのPHP。
私が読み進めながら、少し疑問に思って調べたところを整理します。
私と似たようなところを疑問に感じた方が、この記事を参照して本が読みやすくなれば幸いです。
実行環境は PHP 7.3.7 です。
2章 テキストと数の操作
printf()
丸めに注意
$num = 5.24; // 5.2
$num = 5.25; // 5.2
$num = 5.251; // 5.3
$num = 5.26; // 5.3
sprintf() との違い
printf() は出力した文字列の長さが戻り値。
sprintf() はフォーマットされた文字列が戻り値。
3章 ロジック:判定と繰り返し
strcmp()
strcasecmp() との違い
strcmp() は大文字小文字を区別する。
strcasecmp() は大文字と小文字を区別しない。
戻り値が異なる。
print strcmp($a, $b); // -1
print strcasecmp($a, $b); // -4
print strcmp($a, $b); // -1
print strcasecmp($a, $b); // -3
print strcmp($a, $b); // -4
print strcasecmp($a, $b); // -4
宇宙船演算子 <=> との違い
宇宙船演算子は戻り値が -1, 0, 1 のいずれか。
宇宙船演算子は文字列を数値に変換する。
print strcmp($a, $b); // 1 先頭の 5 と 3 とを比較
print $a <=> $b; // -1 数値変換して 5 と 367 とを比較
7章 ユーザとの情報交換:Webフォームの作成
$_SERVER
'PHP_SELF' が XSS のセキュリティホールになり得る理由
pentan.infoさんのまとめがわかりやすいです。
filter_input()
option 指定する min_range と max_range
注) ここでは filter_input() の代わりに filter_var() を使用しています。
$num = 0; // bool(false)
$num = 1; // int(1) 'min_range' で指定した値は含む
$num = 2; // int(2)
$num = 8; // int(8)
$num = 9; // int(9) 'max_range' で指定した値は含む
$num = 10; // bool(false)
$num = filter_var($num, FILTER_VALIDATE_INT, array(
'options'=>array(
'min_range' => 1,
'max_range' => 9
)));
htmlentities()
htmlspecialchars()との違い
変換を行う対象の範囲が異なる。
変換対象は get_html_translation_table() で確認できる。
「"」、「&」、「<」、「>」は共通して変換を行う。
print_r(get_html_translation_table(HTML_ENTITIES));
print_r(get_html_translation_table(HTML_SPECIALCHARS));
8章 情報の保存:データベース
PDO::exec
PDO::query との違い
PDO::exec は SELECT からの結果を返さない。戻り値は更新、削除された行数。SELECT する場合は query() を使用する。
PDO::query は結果セットを PDOStatement オブジェクトとして返す。
PDOStatement
PDO::prepareで準備したプリペアドステートメントを表す。ステートメント実行後は結果セットを表す。
PDOStatement::execute
PDO::prepare で準備したプリペアドステートメントを実行する。
戻り値は TRUE または FALSE。
実行したその結果は PDOStatement オブジェクトが表す。
11章 他のWebサイトやサービスとのやり取り
ストリーム
別記事にまとめました。
curl_exec()
戻り値は TRUE or FALSE。
CURLOPT_RETURNTRANSFER を設定してる場合は文字列を返す。
curl_getinfo()
$c = curl_init('https://qiita.com/desho/items/90ae697783ce5c0dcefa');
$info1 = curl_getinfo($c); // この状態では ['url'] の情報程度しか入っていない。
curl_exec($c);
$info2 = curl_getinfo($c); // ここではたくさんの情報が入る。
$info3 = curl_getinfo($c);
var_dump($info2 == $info3); // bool(true) 2度実行しても同じ配列。
curl_close($c);
$info4 = curl_getinfo($c); // 警告が出る。
さいごに
やっぱり理解できるようになると面白いですね。
フレームワークも実際に使ってみて理解を深めていきたいです。