要旨(「BOOK」データベースより)
Webアプリケーションの定番言語であるPHPの基礎から実践までをあますところなく網羅。よいPHPアプリケーションのあるべき姿、そしてあるべき姿に近づくためのアプリケーション設計ポリシーをふまえ、「とりあえずは動く」だけでは終わらせない、現場必須の知識とテクニックを解説。
目次
■■1章 はじめてのPHP
■1-1 Webの仕組みとPHPの役割
1-1-1 Webページを動的に組み立てるためのプログラム言語 ― PHP
1-1-2 ラッキーカラーをPHPで動的に表示する
1-1-3 PHPはサーバー上で実行される、サーバーサイド言語
1-1-4 PHPはしなやかなプログラム言語 ― 他言語との比較
1-1-5 HTMLの基本的な書式を理解する
1-1-6 レイアウトはHTMLで、視覚表現はCSSで
■1-2 WebサーバーとWebクライアントはどのようにコミュニケーションをとるのか ― HTTPリクエストとHTTPレスポンス
1-2-1 Webクライアントからのページ要求 ― HTTPリクエスト
1-2-2 Webサーバーからのページ応答 ― HTTPレスポンス
■1-3 WebサーバーとPHP
1-3-1 Webサーバーソフトウェアを使ってOSにWebサーバー機能をもたせる
1-3-2 PHPの2つの実行方法 ― CGI版とCLI版
■1-4 XAMPPによる開発環境のセットアップ
1-4-1 Windows版XAMPPをインストールする
1-4-2 Apacheを起動する
1-4-3 ダウンロードファイルを展開する
1-4-4 php.iniを設定する
1-4-5 コマンドラインでPHPを実行する ― CLI版PHP
■1-5 ベーシックなPHPプログラム
1-5-1 PHPプログラムはPHPタグの中に書く
1-5-2 PHPの命令文はセミコロンで終わらせる
1-5-3 プログラマーのためのヒントを残す ― コメント
1-5-4 URLとファイルパスの関係を理解する ― localhostドメインとドキュメントルート
■■2章 PHPの基本構文
■2-1 変数を使って値を出し入れする ― 代入と出力
2-1-1 流動的なデータを持ち運ぶ ― 変数
2-1-2 変数の命名規則
2-1-3 変数の値を出力する ― echo命令、print命令
2-1-4 デバッグのために変数の情報を出力する ― var_dump命令
■2-2 さまざまな形式の値を取り扱う ― データ型
2-2-1 単一のデータを保存する ― スカラー変数とデータ型
2-2-2 文字列データの扱い(1) ― 固定値と変数値をつなぐ
2-2-3 文字列データの扱い(2) ― クオート内でクオートを使う
2-2-4 文字列データの扱い(3) ― エスケープシーケンスで特殊な文字を表す
2-2-5 文字列データの扱い(4) ― 改行コードをPHP_EOLで切り替える
2-2-6 文字列データの扱い(5) ― 長い文字列にはヒアドキュメントを使う
2-2-7 値のデータ型を変換する ― キャスト
2-2-8 複数の値を順序立てて保存する ― 配列
2-2-9 複数の値をラベル付きで保存する ― 連想配列
2-2-10 PHPにとっては配列も連想配列も同じ
2-2-11 配列を多階層にする ― 多次元配列
2-2-12 配列/連想配列の要素数を得る ― count関数
2-2-13 配列の各要素をスカラー変数に割り当てる ― list()
2-2-14 特別な意味を持つ値に名前を付ける ― 定数
2-2-15 PHPにより値が設定される定数 ― マジック定数
■2-3 役割を持つ記号たち ― 演算子
2-3-1 四則演算などの計算をする ― 代数演算子、加算子/減算子
2-3-2 配列を合成する2つの方法 ― 加算の演算子(+)とarray_merge関数
2-3-3 浮動小数点数の計算 ― 丸め誤差への対応
2-3-4 丸め誤差が起こる原因は、10進数→2進数の対応づけが正確にできないことにある
2-3-5 すでにある変数値に演算を加える ― 複合演算子
2-3-6 2つの変数で1つの値を共有する ― リファレンス渡し
2-3-7 値を比較する ― 比較演算子
2-3-8 浮動小数点数を比較する
2-3-9 2つの値の等価と大小を同時に比較する ― 宇宙船演算子
2-3-10 比較結果に応じた値を選ぶ ― 条件演算子(三項演算子、null合体演算子)
2-3-11 2つ以上の条件を組み合わせる ― 論理演算子
2-3-12 論理演算子の優先順位をコントロールする
2-3-13 論理演算子と命令文の組み合わせで、シンプルな条件分岐を表す
2-3-14 ビット列で複数の真偽値をまとめて表す ― ビット演算子
■2-4 条件によって処理を切り替える ― 条件分岐
2-4-1 シンプルな条件分岐 ― if構文
2-4-2 枝分かれした条件分岐 ― if~elseif構文
2-4-3 条件にマッチしなかった場合の分岐 ― if~else構文
2-4-4 条件式の表現をより豊かにする
2-4-5 条件分岐による空欄チェック処理 ― PHPの自動型変換に気をつける
2-4-6 変数値による条件分岐 ― switch構文
2-4-7 異常時にプログラムを強制終了する ― exit命令、die命令
■2-5 同じ処理を繰り返す ― ループ処理
2-5-1 配列/連想配列に対する繰り返し処理 ― foreachループ
2-5-2 それぞれの要素をループ中に書き換える ― リファレンス渡しによるforeach
2-5-3 リファレンス変数のunsetを忘れると何が起こるか
2-5-4 回数を指定した繰り返し処理 ― forループ
2-5-5 forループを配列のループ処理に使う
2-5-6 制御構文はネストできる
2-5-7 ある条件を満たす間の繰り返し処理 ― whileループ
2-5-8 繰り返し処理の制御 ― break命令、continue命令
2-5-9 制御構文の開始と終了をわかりやすく書く ― endif、endforeach、endfor、endwhile
■2-6 一連のプログラム処理を意味のある単位でまとめる ― 関数
2-6-1 関数の基本的な書き方 ― 関数名、引数、戻り値
2-6-2 return命令は関数を途中で終わらせる
2-6-3 関数から別の関数をコールする
2-6-4 関数内で引数を書き換えた時の挙動 ― 値渡しとリファレンス渡し
2-6-5 その関数は、汎用的か?
2-6-6 関数の内と外で、見えている変数が違う ― 変数のスコープ
2-6-7 引数と戻り値のデータ型を指定する ― 型宣言
2-6-8 データ型の暗黙的な変換を防ぐ ― declare文とstrict_types
2-6-9 declare命令はプログラムファイル単位でしか適用できない
2-6-10 オプショナルな引数を定義する ― デフォルト引数
2-6-11 引数の数を限定しない ― 可変長引数リスト
2-6-12 値として受け渡しできる関数 ― クロージャー
2-6-13 クロージャー外の変数をuseキーワードで引き継ぐ
2-6-14 クロージャーをcallable型の引数として渡す
2-6-15 2つ~3つ程度の処理バリエーションなら、クロージャーより条件分岐を選ぶ
■2-7 共通部品を外部ファイル化し、プログラム間で共有する ― require命令、include命令
2-7-1 require_once命令でPHPプログラムを読み込む
2-7-2 読み込み対象のファイルは絶対パスで指定する
2-7-3 include命令でWebページのパーツHTMLを読み込む
2-7-4 PHPプログラムだけのファイルでは、PHPタグを閉じない
■2-8 PHP実行時のオプション設定
2-8-1 オプション設定の方法1 ― php.iniで指定する
2-8-2 オプション設定の方法2 ― .htaccessで指定する
2-8-3 オプション設定の方法3 ― Apacheの設定ファイルhttpd.confで指定する
2-8-4 オプション設定の方法4 ― ini_set関数で指定する
2-8-5 オプションの設定方法と適用される範囲
2-8-6 オプションによって使える指定方法が異なる ― PHP_INI_*モード
2-8-7 よく扱う実行時オプション一覧
2-8-8 エラーレベルを制御するオプション ― error_reportingオプションとE_*定数
2-8-9 開発サーバーと本番サーバーでのエラーレベル設定
■■3章 プログラムを部品化し、拡張に強いアプリケーションを作る ― オブジェクト指向
■3-1 オブジェクト指向 ― アプリケーションの品質をゆらぎにくくする技術
3-1-1 オブジェクト指向がもたらすメリット
3-1-2 処理を役割分担する ― クラス
3-1-3 クラスに状態を持たせる ― プロパティ
3-1-4 クラスにふるまいを持たせる ― メソッド
3-1-5 クラスに命を吹き込む ー インスタンス
3-1-6 どんなものがクラスになりうるか ― ものと概念と呼び名
■3-2 PHPを使ったオブジェクト指向の実装
3-2-1 クラスを定義する
3-2-2 プロパティを定義する
3-2-3 メソッドを定義する
3-2-4 インスタンス化する ― newキーワード
3-2-5 インスタンスを別のクラスに渡す
3-2-6 1つの役割が、複数のクラスにまたがらないようにする
3-2-7 インスタンス化された時の初期化処理をおこなう ― コンストラクタ
3-2-8 プロパティとメソッドのアクセス権を指定する ― アクセス修飾子
3-2-9 プロパティはprivateが基本 ― アクセサメソッド
3-2-10 クラス固有の定数を持たせる ― オブジェクト定数
3-2-11 インスタンスの状態に左右されないメソッド ― 静的メソッド
3-2-12 プログラム処理全体でクラスの1つの状態を共有する ― 静的プロパティ
3-2-13 静的メソッド/プロパティは自クラスのインスタンスメソッド/プロパティにアクセスできない
■3-3 クラスに親子関係を持たせる ― 抽象クラスと継承
3-3-1 抽象クラスで共通概念を定義し、継承で現実化する
3-3-2 継承に適しているかを判断する ― ●●は▲▲である
3-3-3 抽象クラス/抽象メソッドを定義する ―abstractキーワード
3-3-4 スーパークラスを継承する ― extendsキーワード
3-3-5 スーパークラスの型を使って、サブクラスをひとまとめに扱う
3-3-6 スーパークラスのメソッドを上書きする ― オーバーライド
3-3-7 オーバーロードはPHPでは許可されていない
3-3-8 継承におけるコンストラクタの扱い
3-3-9 スーパークラスのメソッドを呼び出す ― parentキーワード
3-3-10 継承またはオーバーライドをさせない ― finalキーワード
■3-4 クラスのメソッド定義を「約束」させる ― インターフェースと実装
3-4-1 インターフェースの文法上の性質
3-4-2 インターフェースは、ルールに従っていることを約束させるために使う
3-4-3 インターフェースを定義する
3-4-4 インターフェースを実装する ― implementsキーワード
3-4-5 インターフェースの型を使って、実装クラスをひとまとめに扱う
■3-5 横断的で定形的な処理をクラスに挿し込む ― トレイト
3-5-1 プロパティ名/メソッド名のバッティングを解決する ― insteadofキーワード、asキーワード
3-5-2 トレイトとクラスは密な関係を生む
■3-6 名前空間を使って、関連するクラス群をカテゴリー分けする
3-6-1 名前空間を定義する ― namespaceキーワード
3-6-2 名前空間に所属するクラスを呼び出す
3-6-3 名前空間に所属するクラスをあらかじめインポートする ― useキーワード
3-6-4 同じ名前のクラスにエイリアスを与えてインポートする ― asキーワード
3-6-5 2つ以上のクラスをまとめてインポートする
■3-7 イレギュラーなケースに対処する ― 例外処理
3-7-1 Exceptionクラスのプロパティ/メソッド
3-7-2 例外をスローする ― throw命令
3-7-3 例外をキャッチする ― try~catch~finallyブロック
3-7-4 呼び出し元のさらに呼び出し元に例外が伝わる ― 例外の伝播
3-7-5 Exceptionクラスを継承して独自の例外クラスを作る
3-7-6 例外の種類に応じた処理をする ― catchブロックをつなげる
3-7-7 PHPの標準クラスも例外をスローする
3-7-8 PHPにあらかじめ用意された例外クラス ― LogicExceptionとRuntimeException
■3-8 クラスの操作に自動で反応するメソッド ― マジックメソッド
3-8-1 アクセス不能プロパティが読み書きされた時にコールされる__get()、__set()
3-8-2 インスタンスが出力された時に文字列表現を返すための__toString()
■3-9 インスタンスとの付き合い方 ― オブジェクト型変数の性質
3-9-1 オブジェクト型の変数はリファレンスである
3-9-2 インスタンスをコピーする ― cloneキーワード
3-9-3 オブジェクト型のプロパティをディープコピーする ― マジックメソッド__clone
3-9-4 インスタンス同士を比較する
3-9-5 インスタンスの型をチェックする ― instanceofキーワード
■■4章 アプリケーションの機能をより豊かにする ― 内部関数/SPLクラス
■4-1 関数とクラスの種類 ― プログラマーが定義したもの/あらかじめ用意されているもの
4-1-1 汎用的な処理が定義された関数群 ― 内部関数
4-1-2 汎用的な処理が定義されたクラス群 ― 定義済クラスとSPL
4-1-3 関数の構文を理解する
■4-2 文字列を扱う ― 文字列処理のための関数
4-2-1 内部文字エンコーディングを取得または設定する ― mb_internal_encoding
4-2-2 文字を検索する ― mb_strpos、mb_strrpos
4-2-3 文字列の一部を得る ― mb_substr、mb_strstr
4-2-4 文字列を置換する ― str_replace
4-2-5 文字列を区切り文字で分割する ― explode
4-2-6 文字列をパディングする ― str_pad
4-2-7 字種を変換する ― mb_convert_case、mb_convert_kana
4-2-8 文字コードを変換する ― mb_convert_encoding、mb_convert_variables
4-2-9 指定した幅で文字列を丸める ― mb_strimwidth
4-2-10 文字列の前後にあるスペースなどを取り除く ― trim
4-2-11 バイナリデータを文字列に変換する ― base64_encode、base64_decode
4-2-12 URLで使える文字列に変換する ― urlencode、urldecode
4-2-13 URLを要素に分け、クエリ文字列を解析/生成する ― parse_url、parse_str、http_build_query
■4-3 正規表現を使ったパターンマッチング
4-3-1 正規表現で文字列を検索する ― preg_match
4-3-2 正規表現で文字列を置換する ― preg_replace
4-3-3 正規表現による文字列の分割 ― preg_split
4-3-4 正規表現のエスケープ ― preg_quote
■4-4 数値を扱う ― 数値処理のための関数
4-4-1 最小値/最大値を得る ― min、max
4-4-2 四捨五入、切り上げ、切り捨てする ― round、ceil、floor
4-4-3 数値をフォーマットする ― number_format
4-4-4 浮動小数点数を正確に計算する ― BCMath
4-4-5 基数を相互に変換する ― base_convert
4-4-6 バイナリデータを可視化する ― bin2hex、hex2bin
内容紹介
Webアプリケーションの定番言語であるPHPの基礎から実践までを、上下巻のフルボリュームで集大成。
「この目的を実現するためには、どの文法テクニックが適合しやすいだろう?」
「このプログラムをより読みやすくするために、どんなアプローチができるだろう?」
といったことを思考しつつ、「とりあえずは動く」だけで終わらない、現場に求められる品質を形にするための知識とテクニックを解説します。
著者紹介(「BOOK著者紹介情報」より)(本データはこの書籍が刊行された当時に掲載されていたものです)
大家 正登(オオイエ マサト)
1979年、佐賀県生まれ。東京外国語大学外国語学部欧米第二課程スペイン語専攻卒業後、2003年より、株式会社ワイ・ディ・シー中部支社にてJava、PHP、Cなどによる生産管理システムの開発に従事する。2006年より、フリープログラマーとして独立。2008年、デジタルハリウッド横浜校「PHP講座」講師。2009年より現在まで、東京IT株式会社代表取締役
著者について
大家正登 (オオイエマサト)
大家正登(おおいえ まさと)
1979年、佐賀県生まれ。20歳よりフリープログラマーの下でプログラミングやサーバー管理の実務を、21歳より大学の研究室でPerl言語を使った自然言語処理を学ぶ。東京外国語大学外国語学部欧米第二課程スペイン語専攻卒業後、2003年より、株式会社ワイ・ディ・シー中部支社にてJava、PHP、Cなどによる生産管理システムの開発に従事する。2006年より、フリープログラマーとして独立。2008年、デジタルハリウッド横浜校「PHP講座」講師。2009年より現在まで、東京IT株式会社代表取締役。
おもな執筆歴として、『PHP逆引き大全516の極意』『たったコレだけでPHPプログラミングが理解できる本』『たったコレだけでJavaプログラミングが理解できる本』(以上、秀和システム)、「プログラミング未経験から始めるPHP入門」(翔泳社CodeZine・全15回)がある。現在の夢は、幼児・小学生~大学生まで幅広く、プログラミングの楽しさを体験してもらう場を世に広めること。