独習PHP 第3版 読書メモ

ウェブ技術 デジタルトランスフォーメーション技術 人工知能技術 セマンティックウェブ技術 ICT技術 チャットボットと質疑応答技術 ユーザーインターフェース技術 プログラミング PHPとウェブ開発 本ブログのナビ
サマリー

PHPは、サーバーサイドで動作するスクリプト言語であり、主にWebアプリケーションの開発に使用されるものとなる。PHPは、1995年にRasmus Lerdorfによって開発され、現在はオープンソースのコミュニティによって開発、保守されている。

PHPは、動的なWebページの生成やデータベースの操作、ファイルのアップロードやダウンロードなどの機能を実現するために広く使用されており、HTMLに埋め込むことができるので、Webページ内でPHPスクリプトを直接実行するという使い方もできる。また、WordPress、Joomla、Drupalなどのような人気のあるWebアプリケーションのフレームワークとしても広く使用されており、多くのオペレーティングシステムで動作することができ、かつ多くのデータベースやWebサーバーとの統合が容易であるため、Webアプリケーション開発に適している言語として認織されている。

近年ではオブジェクト指向構文、型宣言、標準ライブラリ、アプリケーションフレームワークなどの環境が強化されたことで、いわゆる大規模な開発にも十分に対応可能な地盤も整ってきている。またクラウド環境であるMicrosoft Azureを中心にPHPのサポートが強められており、以前は主にLinux環境の技術という印象のあったPHPも、マルチプラットフォームな環境の下で利用できる様になっている。

ここでは、このPHP技術に関して「独習PHP 第3版」より(現在は第4版が出版されている)をベースに述べている。

今回は読書メモについて述べる。

独習PHP 第3版 読書メモ

第1章 イントロダクション
1.1 PHPとWebアプリケーション
1.1.1 クライアント/サーバ間の通信
1.1.2 静的なページと動的なページ
1.1.3 クライアントサイド技術とサーバサイド技術
1.2 サーバサイド技術におけるPHPの位置付け
1.3 PHP環境を設定するための手順
1.3.1 PHPプログラミングに必要なソフトウェア
1.3.2 XAMPPによる環境設定の手順
1.3.3 サンプル実行のための準備
この章の理解度チェック
第2章 PHPの基本
2.1 PHPの基本構文
2.1.1 拡張子は「.php」が基本
2.1.2 文字コードの設定
2.1.3 PHPはインタプリタ言語
2.1.4 PHPはHTML埋め込み型言語
2.1.5 文を区切るのはセミコロン(;)
2.1.6 大文字/小文字は区別しない
2.1.7 コメントは開発者のための備忘録
2.2 変数
2.2.1 変数の「宣言」
2.2.2 変数の命名規則
2.2.3 補足可変変数
2.3 定数
2.3.1 定数の基本
2.3.2 定義済みの定数
2.4 データ型
2.4.1 論理リテラル(bool)
2.4.2 整数リテラル(int)
2.4.3 浮動小数点リテラル(float)
2.4.4 文字列リテラル
2.4.5 シングルクォート文字列とダブルクォート文字列の違い
2.4.6 ヒアドキュメント
2.4.7 ヌル(null)
2.5 配列
2.5.1 配列の基本
2.5.2 補足配列の内容を確認する
2.5.3 連想配列の基本
2.5.4 多次元配列
2.5.5 補足通常配列と連想配列の関係
2.6 型の相互変換
2.6.1 暗黙的な変換
2.6.2 明示的な変換(キャスト)
2.6.3 補足文字列→数値の型キャスト
この章の理解度チェック
第3章 演算子
3.1 代数演算子
3.1.1 文字列混在の演算
3.1.2 加算子(++)/減算子()
3.1.3 マジカルインクリメント
3.1.4 浮動小数点数の演算に注意
3.1.5 配列の結合
3.2 代入演算子
3.2.1 値による代入と参照による代入
3.3 比較演算子
3.3.1 文字列混在の比較
3.3.2 厳密な等価演算子(===)
3.3.3 浮動小数点数の比較
3.3.4 配列の比較
3.3.5 条件演算子(?:)
3.4 論理演算子
3.4.1 ショートカット演算(短絡演算)
3.5 ビット演算子
3.5.1 ビット論理演算子
3.5.2 ビットシフト演算
3.6 その他の演算子
3.6.1 文字列演算子
3.6.2 実行演算子
3.6.3 エラー制御演算子
3.7 演算子の優先順位と結合則
3.7.1 優先順位
3.7.2 結合則
この章の理解度チェック
第4章 制御構文
4.1 条件分岐
4.1.1 if命令──単純分岐
4.1.2 if命令──多岐分岐
4.1.3 if命令──入れ子構造
4.1.4 補足中カッコは省略可能
4.1.5 switch命令──多岐分岐
4.1.6 補足switch命令の判定方法
4.2 繰り返し処理
4.2.1 while/do〜while命令
4.2.2 補足無限ループ
4.2.3 for命令
4.2.4 補足カンマ演算子
4.2.5 foreach命令
4.2.6 値変数の参照渡し
4.3 ループの制御
4.3.1 break命令
4.3.2 continue命令
4.3.3 ループのネストとbreak/continue命令
4.3.4 補足switch命令でのcontinue命令
4.4 制御命令のその他の話題
4.4.1 goto命令
4.4.2 スクリプトブロックと固定テンプレート
4.4.3 補足制御命令の別構文
この章の理解度チェック
第5章 組み込み関数
5.1 関数の基本
5.1.1 関数の呼び出し
5.1.2 組み込み関数
5.1.3 構文の表記について
5.2 文字列関数
5.2.1文字列の長さを取得する ──mb_strlen関数
5.2.2 文字列を大文字⇔小文字で変換する ──strtolower/strtoupper関数
5.2.3 部分文字列を取得する ──mb_substr関数
5.2.4 部分文字列を置換する ──str_replace関数
5.2.5 文字列を特定の区切り文字で分割する ──explode関数
5.2.6 特定の文字位置を検索する ──mb_strpos/mb_strrpos関数
5.2.7 文字列を整形する ──printf関数
5.2.8 文字列を変換する ──mb_convert_kana関数
5.2.9 文字エンコーディングを変換する ──mb_convert_encoding/ mb_convert_variables関数
5.2.10 電子メールを送信する ──mb_send_mail関数
5.3 配列関数
5.3.1 配列の要素数を取得する ──count関数
5.3.2 配列の内容を連結する ──array_merge関数
5.3.3 配列の各要素を結合する ──implode関数
5.3.4 配列の先頭/末尾に要素を追加/削除する ──array_push/array_pop/array_shift/array_unshift関数
5.3.5 補足スタックとキュー
5.3.6 配列に複数要素を追加/置換/削除する ──array_splice関数
5.3.7 配列から特定範囲の要素を取得する ──array_slice関数
5.3.8 配列の内容を検索する ──array_search関数
5.3.9 配列に特定の要素が存在するかを確認する ──in_array関数
5.3.10 配列の内容を並べ替える ──sort関数
5.3.11 自作のルールで配列を並べ替える ──usort関数
5.4 正規表現(PCRE)関数
5.4.1 正規表現の基本
5.4.2 利用する正規表現関数
5.4.3 正規表現で文字列を検索する ──preg_match関数
5.4.4 すべてのマッチ文字列を取得する ──preg_match_all関数
5.4.5 正規表現で文字列を置換する ──preg_replace関数
5.4.6 補足URL文字列の正規表現パターン
5.4.7 正規表現で文字列を分割する ──preg_split関数
5.4.8 正規表現パターンの修飾子
5.5 ファイルシステム関数
5.5.1 例1テキストファイルへの書き込み
5.5.2 ファイルを開く──fopen/fclose関数
5.5.3 fopen関数でのエラー処理 ── エラー制御演算子
5.5.4 ファイルへの書き込み ──fwrite関数
5.5.5 ファイルのロック ──flock関数
5.5.6 例2タブ区切りテキストの読み込み ──fgetcsv関数
5.5.7 例3 タブ区切りテキストの読み込み(別解)──fgets/file関数
5.5.8 ファイルシステム関数の設定パラメータ
5.6 その他の関数
5.6.1 数学関数
5.6.2変数を破棄する ──unset関数
5.6.3 変数のデータ型を判定する ──is_xxxxx関数
この章の理解度チェック
第6章 ユーザ定義関数
6.1 ユーザ定義関数とは?
6.1.1 ユーザ定義関数の基本
6.1.2 引数/戻り値の型宣言7.0
6.1.3 スクリプトの外部化
6.1.4 補足関数を定義する位置
6.2 変数の有効範囲(スコープ)
6.2.1 グローバル変数とローカル変数
6.2.2 関数内でグローバル変数を利用する ──global命令
6.2.3 静的変数──static命令
6.2.4 インクルードファイルのスコープ
6.2.5 補足unset関数の挙動
6.3 引数のさまざまな記法
6.3.1 引数のデフォルト値
6.3.2 引数の参照渡し
6.3.3 可変長引数の関数5.6
6.3.4 例1可変長引数と通常の引数の混在
6.3.5 「…」演算子による引数のアンパック
6.4 関数呼び出しと戻り値
6.4.1 複数の戻り値
6.4.2 再帰関数
6.4.3 可変関数
6.4.4 無名関数(クロージャ)
6.4.5 親スコープの変数を引き継ぐ ──use命令
6.5 ジェネレータ
6.5.1 例2素数を求めるジェネレータ
6.5.2 ジェネレータの結果を取得する7.0
6.5.3 一部の処理を他のジェネレータに委譲する7.0
この章の理解度チェック
第7章 標準クラスライブラリ
7.1 オブジェクト指向プログラミングの基本
7.1.1 クラスと関数/変数
7.1.2 クラスとオブジェクトの関係
7.1.3 インスタンス化とメンバの呼び出し
7.1.4 静的プロパティ/静的メソッド
7.2 DateTimeクラス
7.2.1 DateTimeオブジェクトの生成
7.2.2 日付/時刻値を指定のフォーマットで整形する ──formatメソッド
7.2.3 日付/時刻文字列を解析する ──createFromFormatメソッド
7.2.4 日付/時刻値を加算/減算する ──add/subメソッド
7.2.5 日付/時刻値の差分を取得する ──diffメソッド
7.2.6 補足日付/時刻関数
7.3 DirectoryIteratorクラス
7.3.1 フォルダを開く
7.3.2 フォルダ配下の要素を順に取得する
7.3.3 ファイル情報を取得する
7.4 外部ライブラリの活用──Composer
7.4.1 Composerのインストール
7.4.2 Composerで利用できる主なコマンド
7.5 テンプレートエンジンSmarty
7.5.1 例テンプレートエンジンの基本
7.5.2 補足Smartyの拡張セットアップ
7.5.3 テンプレートの構成要素
この章の理解度チェック
第8章 リクエスト情報
8.1 リクエスト情報
8.1.1 HTTP通信の確認
8.1.2 HTTPメソッドとHTTPステータス
8.1.3 スーパーグローバル変数
8.2 ポストデータ──$_POST
8.2.1 例1ポストデータを取得する
8.2.2 エスケープ処理の必要性
8.2.3 例2複数の値を持つ要素にアクセスする
8.3 クエリ情報──$_GET
8.3.1 例3クエリ情報を取得する
8.3.2 例4ハイパーリンク経由で値を受け渡しする
8.3.3 ポストデータとクエリ情報
8.4 ヘッダ情報──$_SERVER
8.4.1 ヘッダ情報の種類
8.4.2 ヘッダ情報の利用方法
8.4.3 例5リクエストヘッダを取得する
8.4.4 補足レスポンスヘッダを設定する(1)──リダイレクト
8.4.5 補足レスポンスヘッダを設定する(2)── その他の用法
8.5 サーバ環境変数──$_ENV
8.6 クッキー情報──$_COOKIE
8.6.1 例6クッキーの基本的な読み書き
8.6.2 クッキー授受の仕組み
8.7 セッション情報──$_SESSION
8.7.1 例7基本的なセッション情報の読み書き
8.7.2 セッションの仕組み
8.7.3 セッションを破棄する
8.7.4 セッションにかかわる諸設定
8.8 アップロード処理の実装──$_FILES
8.8.1 例8画像ファイルのアップロード
8.8.2 入力フォームでの注意点
8.8.3 アップロードの実処理
8.8.4 アップロードのエラー処理
8.8.5 アップロードに関連する設定パラメータ
この章の理解度チェック
第9章 データベース連携
9.1 データベースの種類
9.1.1 リレーショナルデータベースの種類
9.2 データベース操作の基本
9.2.1 MariaDBmonitorの使い方
9.2.2 SQLの基本
9.3 データベース抽象化レイヤ
9.3.1 PDO(PHPDataObjects)
9.4 データベースへの接続
9.4.1 接続と切断
9.4.2 例外処理の基本 ──try〜catch〜finally命令
9.4.3 接続スクリプトの外部化
9.4.4 接続オプション
9.5 SQLクエリの発行
9.5.1 例入力値を基にデータベースに登録する
9.5.2 名前付きパラメータと名前なしパラメータ
9.5.3 オートインクリメント値を取得する
9.6 結果セットの取得
9.6.1 フェッチメソッド
9.6.2 フェッチモード
9.7 パラメータ値のバインド
9.7.1 パラメータのデータ型を宣言する ── バイナリデータの操作
9.7.2 bindValueメソッドとbindParamメソッド
9.8 トランザクション処理
9.8.1 トランザクションの活用
この章の理解度チェック
第10章 オブジェクト指向構文
10.1 クラスの定義
10.1.1 最も簡単なクラス
10.1.2 プロパティ
10.1.3 メソッド
10.1.4 コンストラクタ
10.1.5 デストラクタ
10.1.6 静的メソッド
10.1.7 静的プロパティ
10.1.8 クラス定数
10.2 カプセル化
10.2.1 アクセス修飾子
10.2.2 アクセサメソッド
10.3 継承
10.3.1 継承の基本
10.3.2 メソッドのオーバライド
10.3.3 スーパークラスのメソッドを呼び出す ──parentキーワード(1)
10.3.4 スーパークラスのコンストラクタを呼び出す ──parentキーワード(2)
10.3.5 オーバライドの禁止──final修飾子
10.4 ポリモーフィズム
10.4.1 抽象メソッド
10.4.2 インターフェイス
10.4.3 instanceof演算子
10.4.4 無名クラス7.0
10.5 トレイト
10.5.1 トレイトの基本
10.5.2 トレイトと多重継承
10.5.3 例1アクセサメソッドの実装
10.5.4 名前競合時の挙動
10.6 オブジェクトの操作
10.6.1 オブジェクトの代入
10.6.2 オブジェクトの比較
10.6.3 オブジェクトの反復処理
10.6.4 例2反復処理のカスタマイズ
10.7 例外処理
10.7.1 例外をスローする──throw命令
10.7.2 例外クラスを拡張する
10.7.3 エラー報告の処理
10.8 マジックメソッド
10.8.1 未定義のプロパティを処理する(1) ──__get/__setメソッド
10.8.2 未定義のプロパティを処理する(2) ──__isset/__unsetメソッド
10.8.3 未定義のメソッドを処理する ──__call/__callStaticメソッド
10.8.4 オブジェクトの文字列表現を規定する ──__toStringメソッド
10.8.5 オブジェクトを関数として実行する ──__invokeメソッド
10.8.6 オブジェクトの複製方法をカスタマイズする ──__cloneメソッド
10.8.7 デバッグ情報をカスタマイズする ──__debugInfoメソッド5.6
10.9 名前空間
10.9.1 名前空間の基本
10.9.2 名前の記法と名前解決のルール
10.9.3 インポート
10.10 クラスの自動ローディング
10.10.1 spl_autoload_register関数
10.10.2 例3名前空間対応のオートローダ
10.10.3 spl_autoload_register関数の自動呼び出し
この章の理解度チェック
第11章 セキュリティ対策
11.1 クロスサイトスクリプティング
11.1.1 原因
11.1.2 対策
11.1.3 補足タグ文字列の許可
11.2 SQLインジェクション
11.2.1 原因
11.2.2 対策
11.2.3 補足OSコマンドインジェクション
11.3 クロスサイトリクエストフォージェリ
11.3.1 原因
11.3.2 対策
11.4 パストラバーサル
11.4.1 原因
11.4.2 対策
11.4.3 補足nullバイト攻撃
11.5 メールヘッダインジェクション
11.5.1 原因
11.5.2 対策
11.6 その他の攻撃と予防策
11.6.1 セッションハイジャック
11.6.2 ファイルアップロード攻撃
11.6.3 eval攻撃
11.6.4 インクルード攻撃
11.6.5 補足php.iniによる予防
11.7 入力値の検証
11.7.1 検証の前提
11.7.2 例入力フォームの検証処理
この章の理解度チェック
付録A「練習問題」「この章の理解度チェック」解答

コメント

  1. […] 独習PHP 第3版 […]

タイトルとURLをコピーしました