2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初めてのPHPを読んで詳細に調べたくなったところまとめ

Posted at

プログラミング始めて1か月の超初心者がPHP7技術者認定初級試験を受けてみたで学んでいた初めてのPHP
私が読み進めながら、少し疑問に思って調べたところを整理します。
私と似たようなところを疑問に感じた方が、この記事を参照して本が読みやすくなれば幸いです。

実行環境は PHP 7.3.7 です。

2章 テキストと数の操作

printf()

丸めに注意

printf('%.1f',$num);
$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() は大文字と小文字を区別しない。
戻り値が異なる。

$a=1,$b=5
print strcmp($a, $b);      // -1
print strcasecmp($a, $b);  // -4
$a='abc',$b='def'
print strcmp($a, $b);      // -1
print strcasecmp($a, $b);  // -3
$a=2,$b=26978
print strcmp($a, $b);      // -4
print strcasecmp($a, $b);  // -4

宇宙船演算子 <=> との違い

宇宙船演算子は戻り値が -1, 0, 1 のいずれか。
宇宙船演算子は文字列を数値に変換する。

$a='5bc',$b=367
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() を使用しています。

var_dump($num);
$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);  // 警告が出る。

さいごに

やっぱり理解できるようになると面白いですね。
フレームワークも実際に使ってみて理解を深めていきたいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?