PHP入門: 実行して学ぶPHPチュートリアル
無料のPHP 8入門・リファレンス。配列、foreach、文字列関数、日付、フォーム、クラス、エラー処理。すべての例をページ上で実行でき、HTMLを出力する例は送信できるフォーム付きのページとして表示されます。
PHP のガイド付き学習を始めるはじめに
- PHPとは?PHPはサーバーサイドのスクリプト言語です。PHPファイルはWebサーバー上で実行され、組み立てたHTMLをブラウザに送ります。WordPressやLaravel、Webの大きな部分を支えており、コマンドラインのスクリプトとしても動きます。
- PHPのインストールPHPはコマンド1つでインストールできます。Windowsはwinget、macOSはHomebrew、Linuxはaptかdnfです。そのあとターミナルでphp -vを実行し、動作とバージョンを確認します。
- PHPの実行PHPファイルはターミナルでphp index.phpと打てば実行でき、PHPの組み込みサーバー(php -S localhost:8000)を使えばフォルダーをブラウザで表示できます。どちらにもApacheやXAMPPは要りません。
- echoとprintechoは1つ以上の文字列を出力します:echo "Hello, $name"; や echo $a, $b; のように書きます。テキストやHTMLをページに送るときの基本です。printは値を1つだけ出力して1を返し、<?= $x ?>はHTMLの中で使う短縮形です。
- エラー表示PHPのエラーをすべて表示するには、スクリプトの先頭にini_set('display_errors', '1'); と error_reporting(E_ALL); を書くか、php.iniでdisplay_errors = Onとerror_reporting = E_ALLを設定します。本番環境ではエラーを表示せず、ログに記録します。
- PHPとPythonPHPはWebのために作られた言語で、リクエストごとにファイルが実行されてページを出力し、WordPressやLaravelを支えています。Pythonは汎用言語で、Web開発(Django、Flask)もこなしつつ、データサイエンス、自動化、機械学習で主流です。
- PHPとJavaScriptPHPはサーバーで動き、完成したHTMLをブラウザに送ります。JavaScriptはブラウザで動いて読み込み後のページを変更し、Node.jsならサーバーでも動きます。多くのWebサイトは両方を使い、PHPでページとAPIを作り、JavaScriptで操作に反応します。
基本
- 変数PHPの変数は$で始まり、値を代入すると作られます:$name = "Ada";。宣言用のキーワードも固定の型もありません。関数は外側の変数を、引数で渡すか、globalを使うか、キャプチャしない限り参照できません。staticは呼び出しの間で値を保持します。
- データ型PHPには10の型があります。4つのスカラー型(int、float、string、bool)、4つの複合型(array、object、callable、iterable)、2つの特別な型(null、resource)です。var_dump($x)は値の型と中身を表示し、gettype($x)は型名を返します。
- 文字列PHPの文字列はドット演算子で結合するか("Hello, " . $name)、ダブルクォートの中に変数を直接書きます("Hello, $name")。シングルクォートは書いたとおりに出力します。連結、.=、配列やオブジェクトの展開、strtoupper、strtolower、ucfirst、ucwordsでの大文字小文字の変換を学びます。
- ヒアドキュメントPHPのヒアドキュメントは<<<EOTで始まりEOTで終わる複数行の文字列で、ダブルクォートの文字列と同じく変数を置き換えます。Nowdoc(<<<'EOT')はテキストを書いたとおりに保ちます。構文、インデントのルール、配列やオブジェクトの展開、HTMLテンプレートを学びます。
- 演算子PHPの演算子は値に対して働きます。算術は+、-、*、/、%、**、代入は=、+=、.=、??=、論理は&&、||、!、xor、文字列の結合は.、比較は==、===、<=>、インクリメントは++と--です。各グループを実行できる例で学び、andと&&の優先順位の罠も確認します。
- 比較演算子PHPは==(型の自動変換後に等しい)、===(値が等しく型も同じ)、!=と!==、< > <= >=、宇宙船演算子<=>で値を比較します。==がいつ型を変換するのか、PHP 8で何が変わったのかを学び、ゆるい比較と厳密な比較をすべて1つの表で確認します。
- 三項演算子PHPの三項演算子は1行で書けるif/elseです:$result = $condition ? 'yes' : 'no';。省略形の?:(エルビス演算子)、??との違い、PHP 8でネストした三項演算子に括弧が必要な理由、matchのほうがすっきりする場面を学びます。
- null合体演算子 ??PHPのnull合体演算子は、左辺がnullか未設定でない限り左辺を返します:$name = $_GET['name'] ?? 'Guest';。存在しない変数や配列キーについて警告を出しません。??の連鎖、??=による代入、??と?:の違い、nullsafe演算子?->を学びます。
- 型キャストPHPで文字列を整数に変換するには(int) $strかintval($str)を使います。(int) "42"は42、(int) "12abc"は12です。int、float、bool、string、arrayへのキャスト、数値文字列、基数付きのintval、settype、黙って0になる代わりに入力を検証する方法を学びます。
- 定数PHPの定数は変更できない値につける名前です:const MAX_USERS = 100; または define('MAX_USERS', 100);。defineとconstの違い、定数の配列、self::で読むクラス定数、defined()での確認、マジック定数__LINE__、__FILE__、__DIR__、__CLASS__を学びます。
- isset()isset($var)は、変数が存在してnullでなければtrueを、そうでなければfalseを返し、警告は出しません。配列のキーやオブジェクトのプロパティも確認できます:isset($user['email'])。複数の変数、ネストしたキー、issetとemptyの違い、issetとarray_key_existsの違い、フォーム送信の確認を学びます。
- empty()empty($var)は、変数が存在しないか、falseと評価される値(null、false、0、0.0、""、"0"、[])のときにtrueを返します。未定義の変数やキーについて警告は出しません。"0"が空とみなされる理由、空文字や空配列を正確に判定する方法、emptyとissetの違い、フォーム入力の検証を学びます。
- 数学関数と丸めround($x, 2)は小数点以下2桁に四捨五入し、floor()は常に切り捨て、ceil()は常に切り上げます。intdiv()、%演算子、べき乗の**、abs()、max()、min()、乱数のrandom_int()も扱います。
制御構文
- if・elseif・elseif (条件) { ... } は条件がtrueのときだけブロックを実行し、elseifは次の条件を調べ、elseはどれにも当てはまらなかったときに実行されます。elseifとelse ifの違い、&&と||、trueと評価される値、HTMLテンプレート用のif: endif;構文を扱います。
- switch文switch ($value)は1つの値をcaseラベルの一覧と比較し、最初に一致したところからbreakまでのコードを実行します。複数のcase、フォールスルー、default、switch(true)、そしてswitchがゆるい==比較を使う理由を扱います。
- match式match ($x) { 1, 2 => 'low', default => 'other' } は値を厳密な===で比較し、最初に一致したアームの結果を返し、何にも一致しなければUnhandledMatchErrorを投げます。matchとswitchの違い、match(true)、enumと組み合わせたmatchを扱います。
- for文for ($i = 0; $i < 10; $i++) { ... } は、ブロックを決まった回数だけ実行します。開始値、各回の前に調べる条件、ステップの3つで構成されます。添字を使った配列のループ、カウントダウン、ネストしたループ、breakとcontinueを扱います。
- while文while (条件) { ... } は、条件がtrueである間ブロックを繰り返し、各回の前に条件を確認します。do { ... } while (条件); はあとで確認するので、必ず1回は実行されます。breakを使ったwhile (true)、ファイルを1行ずつ読む方法、無限ループの防ぎ方を扱います。
- foreachループforeach ($array as $value)は配列のすべての要素を順に処理し、foreach ($array as $key => $value)ならキーも取得できます。インデックスの取得、参照による値の変更とunset()の落とし穴、breakとcontinue、ネストした配列、foreachでのlist()、HTMLの組み立てを扱います。
配列
- 配列PHPの配列は値の順序付きリストで、各値はキーの下に格納されます:$fruits = ['apple', 'banana']; は$fruits[0]で読めます。配列の作り方、要素の読み書き、ループ、出力、そしてどの配列関数を使えばよいかを学びます。
- 連想配列PHPの連想配列は、自分で名前を付けたキーの下に値を格納します:$user = ['name' => 'Ada', 'age' => 36]; は$user['name']で読めます。ペアの追加・変更・削除、キーと値のループ、すべてのキーや値の取得、キーの確認、キーや値での並べ替えを学びます。
- 多次元配列PHPの多次元配列は、要素が配列である配列で、階層ごとに角括弧を1つずつ付けて読みます:$grid[1][2]や$users[0]['name']。ネストした配列の作り方、深い値の読み書き、ネストしたforeachでのループ、HTMLの表の作成、列の取り出し、行の並べ替えを学びます。
- array_push()array_push($arr, $value)は配列の末尾に1つ以上の値を追加します。値が1つなら$arr[] = $valueでも同じことができ、こちらのほうが速いです。配列の末尾、先頭、途中への追加、キーと値の追加、定番の戻り値のバグの避け方を学びます。
- count()count($arr)はPHPの配列の要素数を返すので、count(['a', 'b', 'c'])は3です。COUNT_RECURSIVEでのネストした配列の数え方、sizeof()とcount()の関係、条件に合う値の数え方、PHP 8以降count(null)がTypeErrorを投げる理由を学びます。
- in_array()in_array($needle, $haystack)は、値が配列の中にあればtrueを返します。第三引数にtrueを渡すと厳密なチェックになり(in_array('1', $ids, true))、型も一致する必要があります。strictフラグ、大文字小文字を区別しない検索、複数の値の確認、ネストした配列、高速なissetによる代替を学びます。
- array_search()array_search($value, $array)は、$valueと等しい最初の要素のキーを返し、なければfalseを返します。キーは0のこともあるので、結果は必ず!== falseで判定します。厳密な検索、すべての一致の取得、array_columnを使った多次元配列の検索、大文字小文字を区別しない検索を学びます。
- array_key_exists()array_key_exists('key', $array)は、配列にそのキーがあれば、値がnullでもtrueを返します。isset($array['key'])のほうが速いですが、値がnullだとfalseを返します。両者の違い、key_exists()、ネストしたキー、複数のキーの確認、オブジェクトにproperty_exists()が必要な理由を学びます。
- array_merge()array_merge($a, $b)は配列を1つにまとめます。数値キーの値は追加されて番号が振り直され、文字列キーでは後の配列が優先されます。array_mergeと+演算子やスプレッド構文[...$a, ...$b]との違い、配列のリストの結合、array_merge_recursiveやarray_replaceが向いている場面を学びます。
- array_map()array_map($callback, $array)は、すべての要素に対してコールバックを呼び出し、結果を新しい配列で返します。アロー関数、キー、複数の配列を同時に処理する方法、array_walkやforeachのほうが向いている場面を学びます。
- array_filter()array_filter($array, $callback)は、コールバックがtrueを返した要素を残します。空の値の取り除き方、ARRAY_FILTER_USE_KEYでのキーによる絞り込み、array_valuesでの番号の振り直し、array_reduceでの集計を学びます。
- 配列のソートsort($array)はリストをその場で並べ替え、asortとksortは連想配列を値やキーで並べ替え、usortは独自の比較で並べ替えます。それぞれの使い方、多次元配列の列による並べ替え、定番の$sorted = sort($arr)のミスの避け方を学びます。
- 配列から削除unset($array[$key])はキーで要素を削除し、array_spliceは位置で削除して番号を振り直し、array_diffは値で削除します。それぞれの使い方、削除後の番号の振り直し、間違った要素を消してしまうarray_searchの落とし穴を学びます。
- array_slice()array_slice($array, $offset, $length)は、元の配列を変えずに配列の一部のコピーを返します。末尾の要素を取る負のオフセット、preserve_keys、リストのページ分け、array_spliceとの違いを学びます。
- array_unique()array_unique($array)は重複する値を取り除き、各値の最初の出現を元のキーのまま残します。結果の番号の振り直し、大文字小文字を無視した重複削除、多次元配列の重複削除、重複の数え方と見つけ方を学びます。
- array_column()array_column($rows, 'email')は、すべての行のemailフィールドを平らな配列で返します。インデックスキーの引数、行をIDで索引付けし直す方法、オブジェクトでの使い方、array_searchで行を見つける方法を学びます。
- 分割代入とlist()[$a, $b] = $arrayは、最初の2つの要素を1行で$aと$bに代入し、['name' => $name] = $userはキーで同じことをします。list()は古い書き方です。要素の読み飛ばし、変数の入れ替え、複数の戻り値、foreachでの分割代入、...スプレッド演算子を扱います。
文字列
- explode()explode(',', $string)は文字列をカンマごとに分割し、各部分を配列で返します。limit引数、改行での分割、各部分のtrim、str_splitやpreg_splitのほうが向いている場面を学びます。
- implode()implode(', ', $array)は、配列の値を間に区切り文字を挟んで1つの文字列につなぎます。キー付きのimplode、連想配列、HTMLのリストの作成、implodeとjoinの違いを学びます。
- str_replace()str_replace($search, $replace, $subject)は、$searchが現れるたびに$replaceへ置き換えます。検索値と置換値の配列、置換回数の取得、大文字小文字を区別しないstr_ireplace、最初の1つだけを置換する方法を学びます。
- substr()substr($string, $offset, $length)は文字列の一部を返します。負のオフセット、最初や最後の文字の取得、日本語などのUTF-8テキスト用のmb_substr、substr_count、省略記号付きでテキストを切り詰める方法を学びます。
- strpos()strpos($haystack, $needle)は、$needleが最初に現れる位置を返し、見つからなければfalseを返します。!== falseでの判定、大文字小文字を区別しないstripos、strrposでの最後の一致、すべての出現を見つける方法を学びます。
- str_contains()str_contains($haystack, $needle)は、$needleが$haystackのどこかに現れればtrueを返します。大文字小文字を区別しない版、str_starts_withとstr_ends_with、複数の単語の確認、PHP 7向けのstrposを使う書き方を学びます。
- trim()trim($string)は文字列の両端から空白、タブ、改行を取り除き、ltrim()とrtrim()は片側だけをきれいにします。特定の文字のtrim、日本語の全角スペース、配列のすべての値のtrimを学びます。
- strlen()strlen($string)は文字列の長さをバイト数で、mb_strlen($string)は文字数で返します。日本語のテキストや絵文字で答えが変わる理由、空文字列の判定方法、入力の長さの検証方法を学びます。
- sprintf()sprintf()は書式と値から文字列を組み立てます:sprintf('%05.2f', 3.14159)は"03.14"を返します。%s、%d、%f、ゼロ埋め、小数点以下の桁数の固定、位置揃え、引数の番号指定、printfとvsprintfを学びます。
- number_format()number_format(1234567.891, 2)は"1,234,567.89"を返します。指定した小数点以下の桁数に丸め、3桁ごとの区切りを付けます。4つの引数、ヨーロッパ式と日本式の書式、丸め方、結果が文字列である理由を学びます。
- 改行PHPで改行を出力するには、ダブルクォートの中に"\n"を書くか、PHP_EOLを使います。Webページでは改行が見えないので、<br>かnl2br()を使います。両者の違い、シングルクォートの'\n'が動かない理由、改行での分割や改行の削除方法を学びます。
- preg_match()preg_match($pattern, $subject, $matches)は文字列を正規表現と照合し、一致すれば1、しなければ0を返します。キャプチャグループ、名前付きグループ、preg_match_all、アンカー、入力検証のパターン、UTF-8や日本語のテキスト用のu修飾子を学びます。
- preg_replace()preg_replace($pattern, $replacement, $subject)は正規表現に一致するすべての部分を置換します:preg_replace('/\s+/', ' ', $text)は連続する空白を1つにまとめます。$1のような後方参照、preg_replace_callback、英数字以外の文字の削除、上限と回数を学びます。
関数
- 関数PHPの関数はfunction name($param) { return $value; }で定義します。戻り値、デフォルト引数、名前付き引数、参照渡し、strict_typesを使った型宣言、null許容型とunion型、可変長引数...$argsを学びます。
- アロー関数アロー関数は、fn($x) => $x * 2と書く1つの式だけの無名関数です。外側の変数をuseなしで自動的に値渡しで使います。構文、キャプチャの仕組み、型、array_mapやusortのコールバック、通常のクロージャを使うべき場面を学びます。
- 無名関数無名関数(クロージャ)は、変数に入れた名前のない関数です:$greet = function ($name) { return "Hi $name"; };。useキーワード、参照によるキャプチャ、callable、ファーストクラスcallable構文strlen(...)、クラスの中のクロージャを学びます。
- ジェネレータジェネレータは、yieldで値を1つずつ返す関数なので、foreachで配列を作らずに100万件をループできます。yield、キー、メモリの節約、無限の数列、yield from、send()とgetReturn()を学びます。
クラスとオブジェクト
- クラスとオブジェクトPHPのクラスは`class Name { }`で宣言する設計図で、`new Name()`でそこからオブジェクトを作ります。プロパティ、メソッド、`$this`、public/private/protected、型付きプロパティとreadonlyプロパティ、`__toString`、オブジェクトを代入してもコピーされない理由を学びます。
- コンストラクタPHPのコンストラクタは`__construct()`メソッドで、`new ClassName(...)`と書くと自動的に実行されます。コンストラクタでのプロパティの昇格、デフォルト引数と名前付き引数、検証、`parent::__construct()`、静的ファクトリーメソッドで複数のコンストラクタを実現する方法を学びます。
- 継承PHPでは`class Dog extends Animal`でクラスがほかのクラスを継承します。親のpublicとprotectedのプロパティとメソッドを受け継ぎ、それらをオーバーライドでき、`parent::method()`で元のものも呼べます。オーバーライド、protected、final、instanceof、privateメソッドの罠を学びます。
- インターフェースPHPのインターフェースは、クラスが持つと約束するメソッドを並べたものです:`interface Shape { public function area(): float; }`とし、`class Circle implements Shape`は`area()`を定義しなければなりません。インターフェースによる型宣言、複数のインターフェースの実装、インターフェースの定数、インターフェースの継承、Countableなどの組み込みインターフェース、インターフェースと抽象クラスの違いを学びます。
- 抽象クラスPHPの抽象クラスは`abstract class Name`と宣言し、インスタンスを作れません。継承されるために存在するクラスです。プロパティ、コンストラクタ、完成したメソッドに加え、すべての子クラスが実装しなければならない本体のない`abstract`メソッドを持てます。
- トレイトPHPのトレイトは、`use TraitName;`でクラスにコピーする再利用可能なメソッドとプロパティのかたまりです。複数のトレイトの使用、`insteadof`と`as`による名前の衝突の解決、トレイトの抽象メンバーと静的メンバー、どのメソッドが優先されるか、トレイトとインターフェースと抽象クラスの違いを学びます。
- 列挙型enumPHPのenum(8.1以降)は値の決まった一覧を持つ型です:`enum Status: string { case Active = 'active'; }`。Pure EnumとBacked Enum、`->value`と`->name`、`from()`と`tryFrom()`での変換、`cases()`でのケースの一覧、メソッド、定数、インターフェース、`match`でのenumを学びます。
- 静的メソッド`static`なメソッドやプロパティはオブジェクトではなくクラスに属します。`ClassName::method()`で呼び出し、`ClassName::$count`で読み、`new`は不要です。`self::`と`static::`の違い(遅延静的束縛)、`new static`、関数内のstatic変数、staticが不適切な場面を学びます。
- 名前空間PHPの名前空間は、クラス、関数、定数を接頭辞の下にまとめます。ファイルの先頭に`namespace App\Models;`と書き、ほかの場所では`use App\Models\User;`で短い名前でクラスを参照します。完全修飾名、`use ... as`のエイリアス、`use function`、グローバルなクラスに付ける先頭のバックスラッシュ、PSR-4のオートロードを学びます。
エラーと例外
- try catchPHPでは、失敗するかもしれないコードを`try { }`ブロックに入れ、例外が投げられると`catch (Exception $e) { }`が実行され、理由は`$e->getMessage()`でわかります。複数の例外の型のキャッチ、`finally`、`catch (Exception)`が`TypeError`や`DivisionByZeroError`を取りこぼす理由(`Throwable`をキャッチする)、再スロー、グローバルなハンドラーを学びます。
- 例外PHPでは`throw new Exception('message');`で例外を投げ、呼び出し側は`catch`ブロックで`$e->getMessage()`を読みます。組み込みの例外クラス、独自の例外の書き方、`getCode()`、`getLine()`、`getPrevious()`、式としての`throw`、`ValueError`や`TypeError`のようにPHP自身が投げるエラーを学びます。
データ、ファイル、Web
- json_encode()json_encode($value)は、PHPの配列、オブジェクト、スカラー値をJSONの文字列に変換します。連想配列はJSONオブジェクトに、リストはJSON配列になり、JSON_PRETTY_PRINTやJSON_UNESCAPED_UNICODEなどのフラグで出力を制御できます。
- json_decode()json_decode($json, true)はJSONの文字列をPHPの連想配列に変換し、trueを付けなければstdClassのオブジェクトになります。ネストした値、JSON_THROW_ON_ERRORでのエラー処理、json_validate()、json_decodeがnullを返す理由を学びます。
- date()date('Y-m-d')は今日の日付を文字列で返し、date('Y-m-d', $timestamp)は任意のUnixタイムスタンプをフォーマットします。time()、mktime()、strtotime()、DateTimeImmutable、日数の加算、2つの日付の差、タイムゾーンを、実行できる例で学びます。
- 日付フォーマットPHPの日付フォーマットは'Y-m-d H:i:s'のような文字の並びで、Yは4桁の年、mは月、dは日、Hは時、iは分、sは秒です。すべてのフォーマット文字を例付きで紹介し、エスケープ、ISO 8601、日本語の日付、フォーマットの変換も扱います。
- file_get_contents()file_get_contents('notes.txt')はファイル全体を読んで1つの文字列として返し、読めなければfalseを返します。対になるfile_put_contents()は文字列をファイルに書き込み、file()は行を配列で返します。
- fopen()fopen('data.txt', 'r')はファイルを開いてハンドルを返し、失敗するとfalseを返します。ハンドルからはfgets()やfread()で読み、fwrite()で書き、fclose()で閉じます。モード('r'、'w'、'a'、'x'、'c'とその+の形)で何ができるかが決まります。
- includeとrequireinclude 'header.php';は、そのコードを貼り付けたかのように、その場所でほかのPHPファイルを実行します。requireも同じことをしますが、ファイルがないと致命的エラーでスクリプトを止め、includeは警告を出して処理を続けます。include_onceとrequire_onceはファイルを最初の1回だけ読み込みます。
- フォームPHPのフォームは<form method="post">で自分自身に送信し、$_SERVER['REQUEST_METHOD']が'POST'になったら、スクリプトが$_POST['name']から項目を読みます。バリデーション、項目の隣のエラーメッセージ、入力値の保持、チェックボックスとセレクト、出力のエスケープを学びます。
- $_GETと$_POST$_GETはURLのクエリ文字列(?page=2なら$_GET['page'])を、$_POSTはmethod="post"で送信されたフォームの項目を持っています。両方を安全に読む方法、http_build_queryでのリンクの作成、$_SERVER['REQUEST_METHOD']の確認、GETとPOSTの選び方を学びます。
- htmlspecialchars()htmlspecialchars($text)は、HTMLで意味を持つ5つの文字(& < > " ')をエンティティに変換するので、ユーザーの入力はマークアップとして動かずにテキストとして表示されます。ENT_QUOTES、属性のエスケープ、二重エンコード、htmlentitiesとstrip_tagsを学びます。
- セッションとCookieすべてのページの先頭でsession_start()を呼び、$_SESSION['key']に値を保存します。PHPはそれをサーバーに保持し、Cookieを通して訪問者を覚えます。setcookie('name', 'value', $options)はブラウザに小さな値を保存し、$_COOKIEで読み戻します。ログイン、ログアウト、フラッシュメッセージ、Cookieのオプション、セキュリティの設定を学びます。
- password_hash()password_hash($password, PASSWORD_DEFAULT)でパスワードをハッシュ化し、60文字の結果を保存し、password_verify($password, $hash)でログインを確認します。ハッシュが毎回変わる理由、コスト、password_needs_rehash、Argon2id、md5やsha1がパスワードに不適切な理由を学びます。
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL)は、値が正しければその値を、そうでなければfalseを返します。FILTER_VALIDATE_INT、FILTER_VALIDATE_URL、FILTER_VALIDATE_BOOL、FILTER_VALIDATE_IPも同じように動きます。オプション(min_range、default)、フラグ、サニタイズフィルター、falseと0の罠を学びます。
- PDOPDOはPHPのデータベース層です。new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass)で接続し、値を含むすべてのクエリをprepare()とexecute([$value])で実行します。接続、プリペアドステートメント、行の取得、挿入、トランザクション、WHERE INを学びます。
- ComposerComposerはPHPのパッケージマネージャーです。composer require vendor/packageでライブラリをvendor/にダウンロードしてcomposer.jsonに記録し、require 'vendor/autoload.php'で読み込みます。Composerのインストール、composer.json、バージョン制約、installとupdateの違い、自分のクラスのPSR-4オートロードを学びます。
デバッグと練習
- var_dump()とprint_r()print_r($array)は配列を読みやすい形で出力し、var_dump($value)はすべての型と長さも表示し、var_exportは正しいPHPのコードを出力します。それぞれの使いどころ、print_rを文字列として得る方法、<pre>を使ったHTMLでの整形表示を学びます。
- 面接質問==と===、issetとemptyから、foreachでの参照、selfとstatic、ジェネレータ、SQLインジェクション、パスワードのハッシュ化まで、PHP 8で正しい短い回答付きの24のPHP面接質問です。ほとんどの回答には、実行して変更できるコードが付いています。