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

独習PHP 第3版 書影

ISBN: 978-4-7981-3547-2

独習PHP 第3版

サポート終了
著者山田祥寛
出版社翔泳社
価格3,200円(税別)
判型B5変判・1色
ページ数576ページ
発売日2016年4月8日
シリーズ 独習
対象レベル初中級

改訂版が刊行されています。詳細はこちらをご覧ください。

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

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

更新履歴

  • FAQ情報:2020年8月20日 更新
  • 正誤訂正:2020年5月12日 更新

目次

  • 第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 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キーワード(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 「練習問題」「この章の理解度チェック」解答
  • Column
  • Apache/MariaDBが起動しない場合
  • PHPの歴史─PHP1.0〜PHP5.6
  • PHPの歴史─永久欠番のPHP6と、最新のPHP7
  • きれいなプログラム、書いていますか?─コーディング規約
  • PHPをより実践的に活用したい人のための関連書籍
  • アプリケーションフレームワークの歴史
  • PHPアプリ開発に役立つ統合開発環境─Eclipse PDT
  • PHPが利用可能なレンタルサーバー
  • printとechoの違いとは?

正誤表

該当頁 該当箇所 修正刷
訂正箇所 訂正事項 更新日
p.100 図3.14 ビットシフト演算子 10進数の数値 2刷
5 10 2016/07/16
p.136 本文5行目 2刷
たとえば、リスト4.24はgoto命令を利用することで、 たとえば、リスト4.25はgoto命令を利用することで、 2016/04/25
p.174 構文 array_search関数 引数の説明部分 2刷
$haystck $haystack 2016/07/16
p.180 本文 5.4.1項の上 下から5行目 2刷
HTMLから<mata>タグの情報だけを HTMLから<meta>タグの情報だけを 2017/05/19
p.196 練習問題5.4 2 最終行 2刷
「/[a-z0-9\\.\\-]+@([a-z0-9\\-]+\\-)+[a-z0-9\\-]+/i」 「/[a-z0-9\\.\\-]+@([a-z0-9\\-]+\\.)+[a-z0-9\\-]+/i」

@([a-z0-9\\-]+\\.)の閉じカッコの前を「.(ドット)」にしてください
2017/11/04
p.291 リスト7.20 smarty_list.tpl 10行目 5刷
{foreach from=$books item=book} {foreach $books as $book} 2020/04/02
p.443 10.3.4項 冒頭 5刷
サブクラスのスーパークラスを定義 サブクラスのコンストラクタを定義 2020/05/12
p.462 本文 2行目、4行目 5刷
public hoge(FaxTrait fax) { … }

public hoge(IFax fax) { … }
public function hoge(FaxTrait $fax) { … }

public function hoge(IFax $fax) { … }
2020/05/12
p.482 [note]2行目 5刷
引数として例外(Exceptionオブジェクト)を受け取る関数を渡します。 引数として例外(Throwable型)を受け取る関数を渡します。 2020/05/12

FAQ

Windows7などでは、既定ではUTF-8に対応しておらず、文字化けしてしまうので、コマンドプロンプトの文字コード変更&フォントの変更が必要になります。
UTF-8に変更するには以下のコマンドを入力後、コマンドプロンプトのプロパティからフォントを「ラスターフォント」などに変更します。
---
> chcp 65001
---

以下のページなども参考にしてお試し戴けますと幸いです。
http://pentan.info/program/cmd_chcp.html

更新日: 2018.12.20

刊行後、Chromeのバージョンアップによって、文字エンコードを変更する機能が廃止されました。
サンプルの実行結果が文字化けしていることを確認できたら、次へ進んでください。

更新日: 2018.06.01

本書刊行後、PHPのバージョンアップに伴いPCREの仕様が変更されています。
PHP7.3以降では、正規表現中のハイフン(-)はエスケープ処理を行うか、開始位置/終了位置のいずれかに配置する必要があります。

以下、変更例です。

<変更前>
'|http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?|'

<エスケープで変更後>
'|http(s)?://([\w\-]+\.)+[\w\-]+(/[\w\- ./?%&=]*)?|'

<終了位置に変更後>
'|http(s)?://([\w-]+\.)+[\w-]+(/[\w ./?%&=-]*)?|'

更新日: 2020.08.20

お問い合わせ

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

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