書籍詳細(独習PHP 第4版)

独習PHP 第4版 書影

ISBN: 978-4-7981-6849-4

基礎からきっちり身に付くPHP入門書。PHP8対応

PHP8の基本構文から、クラス、DB連携、セキュリティ対策まで、しっかり学習。
解説→例題→練習問題(理解度チェック)の3ステップで、基本テクニックをしっかり習得。
実際にサンプルコードを入力し、動作を確かめながら学習することで、いっそう理解が深まります。サンプルはサポートページからダウンロード可能。
独習PHP 第4版 ロゴ

更新履歴

  • FAQ情報:2023年5月19日 更新
  • 正誤訂正:2023年12月2日 更新

目次

  • 第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 Visual Studio Codeのインストール
  • 1.3.4 サンプル実行のための準備
  • 1.4 PHPの基本構文
  • 1.4.1 基本的なアプリの作成
  • 1.4.2 拡張子は「.php」が基本
  • 1.4.3 文字コードの設定
  • 1.4.4 改行コードの設定
  • 1.4.5 PHPはインタプリター型の言語
  • 1.4.6 PHPはHTML埋め込み型言語
  • 1.4.7 文を区切るのはセミコロン(;)
  • 1.4.8 大文字/小文字は区別しない
  • 1.4.9 コメントは開発者のための備忘録
  • この章の理解度チェック
  • 第2章 PHPの基本
  • 2.1 変数
  • 2.1.1 変数の宣言
  • 2.1.2 変数の命名規則
  • 2.1.3 より良い識別子のためのルール
  • 2.1.4 [補足]可変変数
  • 2.2 定数
  • 2.2.1 定数の基本
  • 2.2.2 定数のルール
  • 2.2.3 [補足]define関数
  • 2.2.4 定義済みの定数
  • 2.3 データ型
  • 2.3.1 論理リテラル(bool)
  • 2.3.2 整数リテラル(int)
  • 2.3.3 浮動小数点数リテラル(float)
  • 2.3.4 文字列リテラル
  • 2.3.5 シングルクォート文字列とダブルクォート文字列の違い
  • 2.3.6 ヒアドキュメント
  • 2.3.7 ヌル(null)
  • 2.4 配列
  • 2.4.1 配列の基本
  • 2.4.2 [補足]配列の内容を確認する
  • 2.4.3 連想配列の基本
  • 2.4.4 多次元配列
  • 2.4.5 [補足]通常配列と連想配列の関係
  • 2.5 型の相互変換
  • 2.5.1 暗黙的な変換
  • 2.5.2 明示的な変換(キャスト)
  • 2.5.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.2.2 分割代入
  • 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.5.3 [応用]ビットフィールドによるフラグ管理
  • 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 条件式を指定する場合の注意点
  • 4.1.6 [補足]if命令によるコメントアウト
  • 4.1.7 switch命令―多岐分岐
  • 4.1.8 [補足]switch命令の判定方法
  • 4.1.9 値を返す新しい「switch」―match式[8.0]
  • 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.2.7 foreach命令での分割代入
  • 4.3 ループの制御
  • 4.3.1 break命令
  • 4.3.2 continue命令
  • 4.3.3 入れ子のループを中断/スキップする
  • 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.2 文字列関数
  • 5.2.1 文字列の長さを取得する―mb_strlen関数
  • 5.2.2 文字列を大文字⇔小文字で変換する―mb_convert_case関数
  • 5.2.3 部分文字列を取得する①―mb_substr関数
  • 5.2.4 部分文字列を取得する②―mb_strstr関数
  • 5.2.5 部分文字列を置換する―str_replace関数
  • 5.2.6 文字列を特定の区切り文字で分割する―explode関数
  • 5.2.7 特定の文字位置を検索する―mb_strpos/mb_strrpos関数
  • 5.2.8 部分文字列の登場回数をカウントする―mb_substr_count関数
  • 5.2.9 文字列に特定の文字列が含まれるかを判定する―str_contains/str_starts_with/str_ends_with関数[8.0]
  • 5.2.10 文字列の前後から空白を除去する―trim/ltrim/rtrim関数
  • 5.2.11 文字列を整形する―printf関数
  • 5.2.12 文字列を変換する―mb_convert_kana関数
  • 5.2.13 文字エンコーディングを変換する―mb_convert_encoding関数
  • 5.2.14 電子メールを送信する―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.3.12 配列の内容を順に処理する―array_walk関数
  • 5.3.13 配列内の要素を加工する―array_map関数
  • 5.3.14 配列の内容を特定の条件で絞り込む―array_filter関数
  • 5.3.15 配列内の要素を順に処理して1つにまとめる―array_reduce関数
  • 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 正規表現で置き換えたコールバック関数で処理する―preg_replace_callback関数
  • 5.4.7 正規表現で文字列を分割する―preg_split関数
  • 5.4.8 正規表現パターンの修飾子
  • 5.4.9 [例]正規表現による検索
  • 5.5 ファイルシステム関数
  • 5.5.1 [例]テキストファイルへの書き込み
  • 5.5.2 ファイルを開く―fopen/fclose関数
  • 5.5.3 fopen関数でのエラー処理―エラー制御演算子
  • 5.5.4 ファイルへの書き込み―fwrite関数
  • 5.5.5 ファイルのロック―flock関数
  • 5.5.6 [例]タブ区切りテキストの読み込み―fgetcsv関数
  • 5.5.7 [例]タブ区切りテキストの読み込み(別解)―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 関数名
  • 6.1.3 仮引数と実引数
  • 6.1.4 戻り値
  • 6.1.5 引数/戻り値の型宣言
  • 6.1.6 複合的な型宣言
  • 6.1.7 スクリプトの外部化
  • 6.1.8 [補足]関数を定義する位置
  • 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 名前付き引数[8.0]
  • 6.3.4 可変長引数の関数
  • 6.3.5 [例]可変長引数と通常の引数の混在
  • 6.3.6 [例]可変長引数で「1個以上の引数を渡す方法」
  • 6.3.7 「...」演算子による引数のアンパック
  • 6.4 関数呼び出しと戻り値
  • 6.4.1 複数の戻り値
  • 6.4.2 再帰関数
  • 6.4.3 可変関数
  • 6.4.4 無名関数(クロージャー)
  • 6.4.5 親スコープの変数を引き継ぐ―use命令
  • 6.4.6 アロー関数[7.4]
  • 6.5 ジェネレーター
  • 6.5.1 [例]素数を求めるジェネレーター
  • 6.5.2 ジェネレーターの結果を取得する
  • 6.5.3 一部の処理を他のジェネレーターに委譲する
  • この章の理解度チェック
  • 第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 ライブラリのインストール
  • 7.4.3 composerコマンドのその他のサブコマンド
  • 7.5 HTTPクライアントGuzzle
  • 7.5.1 HTTP通信の基本
  • 7.5.2 HTTP POSTによる通信
  • 7.5.3 [例]JSONデータを取得する
  • この章の理解度チェック
  • 第8章 リクエスト情報
  • 8.1 リクエスト情報
  • 8.1.1 HTTP通信の確認
  • 8.1.2 HTTPメソッドとHTTPステータス
  • 8.1.3 スーパーグローバル変数
  • 8.2 ポストデータ―$_POST
  • 8.2.1 [例]ポストデータを取得する
  • 8.2.2 エスケープ処理の必要性
  • 8.2.3 [例]複数の値を持つ要素にアクセスする
  • 8.3 クエリ情報―$_GET
  • 8.3.1 [例]クエリ情報を取得する
  • 8.3.2 [例]ハイパーリンク経由で値を受け渡しする
  • 8.3.3 ポストデータとクエリ情報
  • 8.4 ヘッダー情報―$_SERVER
  • 8.4.1 ヘッダー情報の種類
  • 8.4.2 ヘッダー情報の利用方法
  • 8.4.3 [例]リクエストヘッダーを取得する
  • 8.4.4 [補足]レスポンスヘッダーを設定する①―リダイレクト
  • 8.4.5 [補足]レスポンスヘッダーを設定する②―その他の用法
  • 8.5 サーバー環境変数―$_ENV
  • 8.6 クッキー情報―$_COOKIE
  • 8.6.1 [例]クッキーの基本的な読み書き
  • 8.6.2 クッキー授受の仕組み
  • 8.7 セッション情報―$_SESSION
  • 8.7.1 [例]基本的なセッション情報の読み書き
  • 8.7.2 セッションの仕組み
  • 8.7.3 セッションを破棄する
  • 8.7.4 セッション関連の設定パラメーター
  • 8.8 アップロード処理の実装―$_FILES
  • 8.8.1 [例]画像ファイルのアップロード
  • 8.8.2 入力フォームでの注意点
  • 8.8.3 アップロードの実処理
  • 8.8.4 アップロードのエラー処理
  • 8.8.5 アップロード関連の設定パラメーター
  • この章の理解度チェック
  • 第9章 データベース連携
  • 9.1 データベースの種類
  • 9.1.1 リレーショナルデータベースの種類
  • 9.2 データベース操作の基本
  • 9.2.1 MariaDB monitorの使い方
  • 9.2.2 SQLの基本
  • 9.3 データベース抽象化レイヤー
  • 9.3.1 PDO(PHP Data Objects)
  • 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キーワード①
  • 10.3.4 スーパークラスのコンストラクターを呼び出す―parentキーワード②
  • 10.3.5 オーバーライドの禁止―final修飾子
  • 10.3.6 委譲
  • 10.3.7 遅延静的束縛
  • 10.4 ポリモーフィズム
  • 10.4.1 抽象メソッド
  • 10.4.2 インターフェイス
  • 10.4.3 instanceof演算子
  • 10.4.4 無名クラス
  • 10.5 トレイト
  • 10.5.1 トレイトの基本
  • 10.5.2 トレイトと多重継承
  • 10.5.3 [例]アクセサーメソッドの実装
  • 10.5.4 名前競合時の挙動
  • 10.6 オブジェクトの操作
  • 10.6.1 オブジェクトの代入
  • 10.6.2 オブジェクトの比較
  • 10.6.3 オブジェクトの反復処理
  • 10.6.4 [例]反復処理のカスタマイズ
  • 10.6.5 [例]素数を求めるイテレーター
  • 10.7 例外処理
  • 10.7.1 例外クラスの型
  • 10.7.2 例外をスローする―throw命令
  • 10.7.3 例外をスローする場合の注意点
  • 10.7.4 エラー報告の処理
  • 10.7.5 スタックトレース情報
  • 10.7.6 独自の例外クラス
  • 10.8 マジックメソッド
  • 10.8.1 未定義のプロパティを処理する①―__get/__setメソッド
  • 10.8.2 未定義のプロパティを処理する②―__isset/__unsetメソッド
  • 10.8.3 未定義のメソッドを処理する―__call/__callStaticメソッド
  • 10.8.4 オブジェクトの文字列表現を規定する―__toStringメソッド
  • 10.8.5 オブジェクトを関数として実行する―__invokeメソッド
  • 10.8.6 オブジェクトの複製方法をカスタマイズする―__cloneメソッド
  • 10.8.7 デバッグ情報をカスタマイズする―__debugInfoメソッド
  • 10.9 名前空間
  • 10.9.1 名前空間の基本
  • 10.9.2 名前の記法と名前解決のルール
  • 10.9.3 インポート
  • 10.10 クラスの自動ローディング
  • 10.10.1 spl_autoload_register関数
  • 10.10.2 spl_autoload_register関数の自動呼び出し
  • 10.10.3 [補足]Composerによる自動ローディングの実装
  • この章の理解度チェック
  • 第11章 高度なプログラミング
  • 11.1 属性[8.0]
  • 11.1.1 属性の基本構文
  • 11.1.2 属性の自作
  • 11.1.3 [補足]リフレクションの主なメソッド
  • 11.2 セキュリティ対策
  • 11.2.1 クロスサイトスクリプティング
  • 11.2.2 SQLインジェクション
  • 11.2.3 クロスサイトリクエストフォージェリ
  • 11.2.4 パストラバーサル
  • 11.2.5 メールヘッダーインジェクション
  • 11.2.6 [補足]php.iniによる予防
  • 11.2.7 その他の攻撃と予防策
  • 11.3 ドキュメンテーションコメント
  • 11.3.1 ドキュメンテーションコメントの例
  • 11.3.2 ドキュメントの生成
  • 11.4 VSCode+PHP Debug拡張によるデバッグ
  • 11.4.1 デバッグ機能の有効化
  • 11.4.2 デバッグの実行
  • この章の理解度チェック
  • 付録A 「練習問題」「この章の理解度チェック」解答
  • Column
  • Apache/MariaDBが起動しない場合
  • PHPの歴史 ―PHP 1.0~5.6
  • PHPの歴史 ―永久欠番のPHP 6と、最新のPHP 8
  • PHPをより実践的に活用したい人のための関連書籍
  • きれいなプログラム、書いていますか? ―コーディング規約
  • アプリケーションフレームワークの歴史
  • よく見かけるエラーとその対処法
  • OPcacheによるアプリ高速化

正誤表

該当頁 該当箇所 修正刷
訂正箇所 訂正事項 更新日
p.98 [note]の上の本文下から2行目 4刷
ちなみに、左辺の要素数が右辺よりも大きい場合には、 ちなみに、左辺の要素数が右辺よりも少ない場合には、 2022/08/05
p.102 リスト3.15の下 本文7行目 4刷
\\'13xyz\\'は13とみなされ、「\\'13xyz\\' == \\'13\\'」はtrueとなります。 \\'13xyz\\'は13とみなされ、「\\'13xyz\\' == 13」はtrueとなります。 2022/03/23
p.113 図3.14 ビットシフト演算子 「10進数」の下の数値 2刷
5 10 2022/01/15
p.169 構文の下 2行目 4刷
引数$start、$encodingに負数を指定した場合 引数$start、$lengthに負数を指定した場合 2022/08/05
p.187 [note]1行目 4刷
引数$additional_paramsには 引数$additional_headersには  2023/02/12
p.191 本文 5行目 4刷
リスト5.16の太字部分をこのように書き換えると、 リスト5.18の太字部分をこのように書き換えると、 2022/09/04
p.214 図5.20 対象文字列の2行目 4刷
電話番号 X9-333-9999 電話番号 X9(333)9999 2022/08/05
p.215 表5.14 上から5行目のパターン 4刷
[X|Y|Z] X|Y|Z 2023/04/12
p.237 練習問題5.3 [2] 問題文の最終行 4刷
「/[a-z0-9\\.\\-]+@([a-z0-9\\-]+\\-)+[a-z0-9\\-]+/i」 「/[a-z0-9\\.\\-]+@([a-z0-9\\-]+\\.)+[a-z0-9\\-]+/i」 2023/04/12
p.286 本文下から5行目 4刷
可変長関数は引数リストの末尾に 可変長引数は引数リストの末尾に 2022/01/19
p.306 prac3.php の穴埋め⑥の後ろ 4刷
fn($num) [⑥] fn($num) [⑥],

(⑥の後ろにカンマを入れてください)
2022/08/05
p.377 [Note]7行目 5刷
より正しくは、header関数の引数$codeに より正しくは、header関数の引数$response_codeに 2023/12/02
p.429 表9.7 SQL Server の接続文字列(例) 4刷
mssql:host=127.0.0.1; dbname=selfphp sqlsrv:Server=127.0.0.1; dbname=selfphp 2022/02/18
p.554 リスト10.67 except_custom2.php 下から3行目 4刷
return $this->getUserid; return $this->userid; 2023/08/03
p.633 練習問題5.1 [1] p_substr.phpの3行目 4刷
print mb_substr($str, 3, 3); print mb_substr($str, 4, 3); 2023/02/12
p.635 6章 この章の理解度チェック[3]の(6)の解答 4刷
=> $num * * 2 => $num * * 2, 2023/10/26

FAQ

刊行後、PHP8.1で仕様が変更になったようです。
https://www.php.net/manual/ja/migration81.incompatible.php#migration81.incompatible.pdo

P.436のリスト9.17 DbManager.phpへの太字追記部分の下に
以下の1行を追加願います。

$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);

更新日: 2023.05.19

お問い合わせ

書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。

Powered by メールフォーム 『オレンジフォーム』