基礎からきっちり身に付くPHP入門書。PHP7対応
PHP7の基本構文から、クラス、DB連携、セキュリティ対策まで、しっかり学べます。解説→例題→練習問題(理解度チェック)という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
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 ./?%&=-]*)?|'
PHP7.3以降では、正規表現中のハイフン(-)はエスケープ処理を行うか、開始位置/終了位置のいずれかに配置する必要があります。
以下、変更例です。
<変更前>
'|http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?|'
↓
<エスケープで変更後>
'|http(s)?://([\w\-]+\.)+[\w\-]+(/[\w\- ./?%&=]*)?|'
<終了位置に変更後>
'|http(s)?://([\w-]+\.)+[\w-]+(/[\w ./?%&=-]*)?|'
更新日: 2020.08.20
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。