PHPを使った開発は個人的に色々とやっていましたが、仕事でPHPを人に教える機会ができたので、体系的にPHPを理解する&問題を作成する参考にするという目的でPHP7 技術者認定[初級]試験問題集を購入しました。
資格を取得する気は今のところありませんが、色々と学べることあって内容には満足です。
他のプログラミング言語でも共通で使える知識(ロジックやオブジェクト指向など)は、初見でもほぼ解くことができました。
また、開発する際によく利用するDB周りの処理も割と解けた。
ただ、ファイルの操作など、開発であまり触れてこなかった部分についてはぼろぼろ。
満遍なくいろんな処理を盛り込んだシステムを開発しないと、体系的に知識を得るのは難しいと実感。
普段から開発している人で、自分があまり触れてこなかった分野の知識を保管する意味でも勉強になります。
ファイル操作やスクレイピングなども、勉強のために今後色々作ってみたいと思う。
以下、本を読んで新しく知った知識、理解が深まった箇所の箇条書き。
- PHPでは言語のキーワードと関数名では大文字と小文字を区別しない(変数名はする)
- ホワイトスペース:半角スペース、タブ、改行のような目に見えない文字
- ucwords()関数:文字列中の単語の最初の文字を大文字に変換する
- strcasecmp()関数:大文字と小文字を区別せず、文字列が一致する場合は0を返す
- 文字列と数値を比較する場合、文字列の先頭を数値に変換して比較する。「5member」と「44」を比較した場合、5と44が比較されることになり、結果として44が大きいと判断されることになる。
- strcmp()関数は、文字列をアルファベット順で比較する。数値の場合、文字列に変換し一番目の文字をアルファベット順で比較する。一番目の引数が二番目の引数より大きい場合は正の数、小さい場合は負の数、等しい場合は0を返す。
- 宇宙演算子(<=>)は、strcmp()関数と同様の比較ができる。左が右より小さい場合は-1、大きい場合は1、等しい場合は0を返す。
- 配列の値を別の配列にコピーした場合、最初は値をさすが、どちらかの値が変更されたタイミングで、メモリを確保してコピーを作成している。これによりメモリを節約している。
- foreach文では、ループされる要素の順番は値が格納された順番になる。添字の順番にならないので注意が必要。
- asort()関数:配列の値を基準に並び替える。キーと値の組み合わせは保持される。
- implode()関数:配列から文字列を作成する。
- explode()関数:文字列から配列を作成する。
- strip_tags()関数:文字列からHTMLタグを取り除く。
- htmlentities()関数:特殊なHTML文字をエンコードする。
- $_SERVERグローバル配列:Webサーバーや現在のリクエストに関する情報を保持している。
- $_SERVER['PHP_SELF']:formタグのアクション属性で指定されたWebサーバーに要求するURLのパス名を表す。
- $_SERVER['REMOTE_ADDR']:WebページにアクセスしているユーザーのIPアドレスを示す。
- ??(null合体演算子):サブミットされたデータに値が入力されていなかった際にPHPからの警告が表示されないようにする。$_POST['id'] ?? '' とすると、値が入力されていればその値を表示し、それ以外はから文字となる。PHP7から導入され、それ以前ではisset関数を利用する。
- filter_input()関数:サブミットされた値が整数か浮動小数点かを判定することができる。
- PDOのエラーモードは、エラー、警告、サイレントの3種類があり、デフォルトはサイレントモード
- setAttributeメソッドでPDOのモードを色々と変更できる。
- PDOのフェッチスタイル:BOTH, NUM, ASSOC, OBJの4種類がある。
- file_get_contents(ファイル名):ファイルの内容を全て読み込む。
- file_put_contents(ファイル名, 文字列):文字列をファイルに書き込む。
- スクリーンスクレイピング:他のWebサイトの画面情報を切り出し、画面の内容から情報を抽出して利用すること。file_get_contents関数で、外部サイトのURLを取得することで、Webページを読み込み、そのWebサイトの情報を利用することができる。
- fopen(ファイル名, ファイルのモード):ファイルへの接続をオープンしてファイルポインタを取得する。ファイルのモードを指定する必要がある。rb:読み込み、rb+:読み込み書き出し、などなど。先頭に追加するか、末尾に追加するか、ファイルが存在しない場合にどうするかなどで8種類のモードがある。
- fgets()関数:ファイルから1行を読み込む。
- feof()関数:ファイルポインタがファイルの終端にあるかどうかを判定する。
- fgetcsv()関数:CSVファイルの行を読み込む関数。
- クライアントに送信するファイルの種類を知らせるにはheader()関数を利用する。
- is_readable()関数:ファイルが読み込み可能かどうか判定する。
- is_writable()関数:ファイルが書き込み可能かどうか判定する。
- realpath()関数:ファイル名の相対パスを絶対パスに変換する。ディレクトリトラバーサルの脆弱性を防ぐ際に使用される。
- アップロードされたファイルの情報は$_FILE配列で確認できる。
- unmask()関数;新しく作成するファイルのパーミッションを設定することができる。
- setcookie()関数:クッキーの設定ができる。引数がかなり多い。。タイムアウトの時間を初め、セキュアの設定など、6つくらい設定できる。
- セッションが利用するクッキーの値はPHPSESSID
- cURL:PHPの拡張機能。HTTPリクエストとレスポンスを柔軟に利用できる。
- curl_exec()関数、curl_init()関数、http_build_query()関数、curl_getinfo関数、curl_setopt関数など。
- ブラウザにエラーを表示するかはdispllay_errors構成ディレクティブ、エラーログに出力するかはlog_errorsl構成ディレクティブ、どのエラーを取り扱うかはerror_reporting構成ディレクティブで設定する。
- phpdbgデバッガ:PHP5.6以降に付随しているPHP付属のデバッガ。
- Webサーバーの稼働:php -S Webサーバー名:ポート番号
- PHP REPL:対話的にPHPを実行できる。php -a で実行可能。