PHPでプログラムを書くうえで、変数とデータ型は最初に理解しておきたい重要な基礎です。
変数は、文字列や数値などの値を一時的に入れておくための「箱」のようなものです。
データ型は、その値が「文字列なのか」「数値なのか」「真偽値なのか」といった、値の種類を表します。
例えば、次のコードを見てください。
$name = "田中";
$age = 25;
$isLogin = true;
このコードでは、3つの変数を使っています。
$name
には "田中" という文字列が入っています。
$age
には 25 という整数が入っています。
$isLogin
には true という真偽値が入っています。
PHPでは、変数名の前に必ず $ を付けます。
この $ があることで、PHPは「これは変数である」と判断します。
PHPの変数の基本
変数は値を入れておくための箱
PHPの変数は、データを一時的に保存しておくために使います。
$message = "こんにちは";
このコードは、$message という変数に "こんにちは" という文字列を代入しています。
変数に値を入れることを代入といいます。
PHPでは、= は数学の「等しい」という意味ではなく、右側の値を左側の変数に入れるという意味で使います。
$count = 1;
$count = 2;
echo $count;
この場合、表示されるのは次の値です。
2
最初に $count に 1 を入れていますが、その後で 2 を代入しているため、変数の中身は上書きされます。
変数名には $ を付ける
PHPの変数名は、必ず $ から始めます。
$name = "山田";
これは正しい書き方です。
一方、次のように $ を付けないと変数として扱われません。
name = "山田";
これはPHPの変数としては正しくありません。
変数を使うときも、代入するときも、表示するときも $ が必要です。
$name = "山田";
echo $name;
変数名の付け方
PHPの変数名は、実務上は英字またはアンダースコアから始めるのが一般的です。
$userName = "佐藤";
$_count = 10;
これは正しい書き方です。
数字から始まる変数名は使えません。
$1name = "佐藤";
これは不正な変数名です。
ただし、2文字目以降であれば数字を使えます。
$name1 = "佐藤";
$user2 = "鈴木";
なお、PHPの仕様上は日本語の変数名も使えます。
$名前 = "田中";
echo $名前;
ただし、実務では基本的に英語の変数名を使うことをおすすめします。
日本語の変数名は環境やチーム開発で扱いづらくなる可能性があり、一般的なPHPコードではあまり使われません。
変数名は大文字と小文字を区別する
PHPの変数名は、大文字と小文字を区別します。
$name = "田中";
$Name = "佐藤";
echo $name;
echo $Name;
この場合、$name と $Name は別の変数です。
$name
には "田中" が入っています。
$Name
には "佐藤" が入っています。
変数名の大文字・小文字を間違えると、意図した値が表示されなかったり、未定義変数のエラーにつながったりします。
特にWordPressテーマやPHPテンプレートを書くときは、変数名のスペルミスや大文字小文字の違いに注意が必要です。
PHPのデータ型とは
データ型は値の種類のこと
データ型とは、値の種類のことです。
例えば、次のコードを見てください。
$name = "田中";
$age = 25;
$height = 170.5;
$isLogin = true;
それぞれの値には種類があります。
| 変数 | 値 | データ型 |
|---|---|---|
$name | "田中" | 文字列 |
$age | 25 | 整数 |
$height | 170.5 | 小数 |
$isLogin | true | 真偽値 |
PHPでは、変数を作るときに型を明示しなくても使えます。
ただし、値そのものには必ず何らかの型があります。
PHPでよく使う主なデータ型
PHPでよく使うデータ型は次のとおりです。
| データ型 | 意味 | 例 |
|---|---|---|
string | 文字列 | "こんにちは" |
int | 整数 | 10, 100, -5 |
float | 小数 | 3.14, 1.5 |
bool | 真偽値 | true, false |
array | 配列 | ["apple", "banana"] |
object | オブジェクト | クラスから作られた値 |
null | 値がない状態 | null |
resource | 外部リソース | ファイルハンドルなど |
初心者の段階では、まず次の6つを優先して覚えるとよいです。
string
int
float
bool
array
null
PHPに慣れてきたら、object や resource、さらに callable、iterable、mixed、void などの型も学んでいくとよいでしょう。
string:文字列
文字列とは
string は文字列を表すデータ型です。
名前、メールアドレス、記事タイトル、本文、URLなど、文字として扱う値は文字列です。
$name = "田中";
$message = "こんにちは";
$email = "tanaka@example.com";
文字列は、ダブルクォーテーション " またはシングルクォーテーション ' で囲みます。
$text1 = "こんにちは";
$text2 = 'こんにちは';
どちらも文字列です。
ダブルクォーテーションとシングルクォーテーションの違い
PHPでは、ダブルクォーテーションとシングルクォーテーションで文字列の扱いが少し変わります。
ダブルクォーテーションでは、文字列の中に書いた変数が展開されます。
$name = "田中";
echo "こんにちは、$name さん";
表示結果は次のようになります。
こんにちは、田中 さん
一方、シングルクォーテーションでは、基本的に変数は展開されません。
$name = "田中";
echo 'こんにちは、$name さん';
表示結果は次のようになります。
こんにちは、$name さん
$name が変数としてではなく、文字としてそのまま表示されています。
変数展開では {} を使うと読みやすい
ダブルクォーテーション内で変数を使う場合は、次のように {} で囲むと読みやすくなります。
$name = "田中";
echo "こんにちは、{$name}さん";
この書き方にすると、変数名の範囲が分かりやすくなります。
特に、文字列と変数をつなげて使う場合は、{$name} のように書くと誤解が少なくなります。
文字列の連結
PHPで文字列をつなげるときは、. を使います。
$lastName = "田中";
$firstName = "太郎";
$fullName = $lastName . $firstName;
echo $fullName;
表示結果は次のとおりです。
田中太郎
姓と名の間にスペースを入れたい場合は、次のように書きます。
$fullName = $lastName . " " . $firstName;
PHPでは、文字列の連結に + は使いません。
JavaScriptなどに慣れていると間違えやすいポイントです。
$name = "田中";
echo "こんにちは、" . $name . "さん";
int:整数
整数とは
int は整数を表すデータ型です。
$age = 25;
$count = 10;
$price = 1980;
小数点のない数値が整数です。
商品価格、件数、年齢、ページ番号、IDなどでよく使います。
整数を使った計算
整数は計算に使えます。
$price = 1000;
$tax = 100;
$total = $price + $tax;
echo $total;
表示結果は次のとおりです。
1100
PHPでは、次のような基本的な演算子を使えます。
| 演算子 | 意味 | 例 |
|---|---|---|
+ | 足し算 | $a + $b |
- | 引き算 | $a - $b |
* | 掛け算 | $a * $b |
/ | 割り算 | $a / $b |
% | 剰余 | $a % $b |
float:小数
小数とは
float は小数を表すデータ型です。
$rate = 1.1;
$pi = 3.14;
$height = 170.5;
税率、割合、平均値、身長、重さなど、小数を扱うときに使います。
歴史的な文脈や一部の関数の出力では double と表現されることもありますが、PHPの型宣言では基本的に float を使います。
小数計算の注意点
小数の計算では、コンピューターの仕組み上、わずかな誤差が出ることがあります。
$price = 1000;
$taxRate = 1.1;
$total = $price * $taxRate;
echo $total;
このような単純な例では分かりにくいですが、小数を使った計算では予想と少し違う値になることがあります。
金額を扱う場合は、実務では次のように丸め処理を入れることがあります。
$total = round($price * $taxRate);
また、金額計算では「円単位の整数」として扱うなど、小数誤差を避ける設計にすることも多いです。
bool:真偽値
真偽値とは
bool は真偽値を表すデータ型です。
値は次の2つだけです。
true
false
例えば、ログインしているかどうか、記事が公開済みかどうか、画像があるかどうかなどを表すときに使います。
$isLogin = true;
$isPublished = false;
$hasImage = true;
真偽値は条件分岐でよく使う
真偽値は、if 文と組み合わせてよく使います。
$isLogin = true;
if ($isLogin) {
echo "ログイン中です";
} else {
echo "ログインしていません";
}
表示結果は次のとおりです。
ログイン中です
$isLogin が true なので、if の中の処理が実行されます。
真偽値の変数名は分かりやすくする
真偽値の変数名には、is、has、can などを付けると分かりやすくなります。
$isLogin = true;
$isPublished = false;
$hasImage = true;
$canEdit = false;
例えば、次のコードは意味が読み取りやすいです。
if ($isPublished) {
echo "公開済みの記事です";
}
$isPublished という名前を見るだけで、「公開されているかどうか」を表す変数だと分かります。
array:配列
配列とは
array は、複数の値をまとめて管理するためのデータ型です。
$fruits = ["apple", "banana", "orange"];
このように、複数の値を1つの変数にまとめて入れることができます。
配列の値は、番号を指定して取り出します。
echo $fruits[0];
echo $fruits[1];
echo $fruits[2];
表示結果は次のようになります。
apple
banana
orange
PHPの配列番号は 0 から始まります。
$fruits[0] // apple
$fruits[1] // banana
$fruits[2] // orange
連想配列とは
PHPでは、キーと値をセットで管理する配列もよく使います。
これを連想配列といいます。
$user = [
"name" => "田中",
"age" => 25,
"email" => "tanaka@example.com"
];
値を取り出すときは、キーを指定します。
echo $user["name"];
echo $user["age"];
echo $user["email"];
表示結果は次のようになります。
田中
25
tanaka@example.com
連想配列は、ユーザー情報、記事データ、商品情報、設定情報などを扱うときによく使います。
$post = [
"title" => "PHPの基本",
"category" => "プログラミング",
"published" => true
];
WordPressやAPI連携でも、連想配列は非常によく登場します。
多次元配列とは
配列の中にさらに配列を入れることもできます。
これを多次元配列といいます。
$users = [
[
"name" => "田中",
"age" => 25
],
[
"name" => "佐藤",
"age" => 30
],
[
"name" => "鈴木",
"age" => 28
]
];
値を取り出すときは、次のように指定します。
echo $users[0]["name"];
echo $users[1]["name"];
echo $users[2]["age"];
表示結果は次のようになります。
田中
佐藤
28
複数のユーザー、複数の記事、複数の商品などを扱う場合、多次元配列はよく使われます。
配列の変数名は複数形にすると分かりやすい
配列には複数の値が入ることが多いため、変数名は複数形にすると分かりやすくなります。
$users = [];
$posts = [];
$categories = [];
$items = [];
1人のユーザーなら $user、複数のユーザーなら $users のように使い分けると、コードの意味が伝わりやすくなります。
null:値がない状態
nullとは
null は、値が存在しないことを表すデータ型です。
$data = null;
例えば、まだユーザー情報を取得していない場合や、値が未設定であることを明示したい場合に使います。
$userName = null;
null は、空文字や 0、false とは違います。
| 値 | 意味 |
|---|---|
null | 値がない |
"" | 空の文字列 |
0 | 数値のゼロ |
false | 偽 |
[] | 空の配列 |
この違いは、フォーム処理やデータベース処理で重要になります。
nullを使う例
例えば、ユーザーが見つからなかった場合に null を使うことがあります。
$user = null;
if ($user === null) {
echo "ユーザーが見つかりません";
}
null かどうかを厳密に判定したい場合は、=== null を使うと分かりやすいです。
object:オブジェクト
オブジェクトとは
object は、クラスから作られるデータ型です。
初心者の段階では少し難しく感じるかもしれませんが、Laravelや本格的なPHP開発では重要になります。
簡単な例を見てみましょう。
class User
{
public string $name = "田中";
}
$user = new User();
echo $user->name;
表示結果は次のとおりです。
田中
new User() によって、User クラスからオブジェクトを作っています。
オブジェクトのプロパティにアクセスするときは、-> を使います。
$user->name
WordPressでもオブジェクトは登場する
WordPressでも、投稿データやユーザーデータがオブジェクトとして扱われることがあります。
例えば、投稿オブジェクトからタイトルなどを取得する場面があります。
$post->post_title
PHPを使ったWeb制作を続けていくなら、配列だけでなくオブジェクトの扱いにも慣れておくとよいです。
resource:外部リソース
resourceとは
resource は、外部リソースを表す特殊な型です。
例えば、ファイルを開いたときのファイルハンドルなどで登場します。
$file = fopen("sample.txt", "r");
この $file は、ファイルにアクセスするためのリソースとして扱われます。
ただし、近年のPHPでは、以前は resource だったものが object として扱われるようになったケースもあります。
そのため、初心者の段階で resource を深く覚える必要はあまりありません。
まずは、string、int、float、bool、array、null を優先して理解するとよいです。
PHPは動的な型の性質を持つ
変数に型を書かなくても使える
PHPでは、変数を作るときに型を明示しなくても使えます。
$name = "田中";
$age = 25;
$isLogin = true;
JavaやTypeScriptのように、変数宣言時に必ず型を書く必要はありません。
また、同じ変数に別の型の値を入れることもできます。
$value = "こんにちは";
$value = 100;
$value = true;
ただし、このように同じ変数の型を何度も変える書き方は、実務ではあまりおすすめしません。
変数の中身が文字列なのか、数値なのか、真偽値なのか分かりにくくなり、バグの原因になりやすいからです。
現代のPHPでは型宣言も重要
PHPは動的な性質を持つ一方で、現在のPHPでは型宣言もよく使われます。
例えば、関数の引数や戻り値に型を指定できます。
function add(int $a, int $b): int
{
return $a + $b;
}
この関数は、$a と $b に整数を受け取り、整数を返すことを表しています。
$result = add(3, 5);
echo $result;
表示結果は次のとおりです。
8
型宣言を使うと、関数がどのような値を受け取り、どのような値を返すのかが分かりやすくなります。
実務では、型宣言を使うことでコードの読みやすさや保守性が高まります。
型を確認する方法
var_dump()で型と値を確認する
PHPで変数の型や中身を確認したいときは、var_dump() を使います。
$name = "田中";
$age = 25;
$height = 170.5;
$isLogin = true;
var_dump($name);
var_dump($age);
var_dump($height);
var_dump($isLogin);
出力例は次のようになります。
string(6) "田中"
int(25)
float(170.5)
bool(true)
ここで注意したいのは、string(6) の 6 は文字数ではなくバイト数だという点です。
日本語はUTF-8では1文字が3バイトになることが多いため、"田中" は2文字ですが、string(6) と表示されます。
配列を見やすく確認する
配列を確認するときも var_dump() は便利です。
$user = [
"name" => "田中",
"age" => 25
];
var_dump($user);
ブラウザで表示すると見づらい場合は、<pre> を使うと整形されて見やすくなります。
echo "<pre>";
var_dump($user);
echo "</pre>";
開発中のデバッグでは、このような確認方法をよく使います。
ただし、本番環境で var_dump() の結果を表示したままにしないよう注意しましょう。
内部情報がユーザーに見えてしまう可能性があります。
型を判定する関数
is_string()やis_int()を使う
PHPには、値の型を判定するための関数があります。
is_string()
is_int()
is_float()
is_bool()
is_array()
is_null()
is_object()
例えば、文字列かどうかを確認したい場合は is_string() を使います。
$name = "田中";
if (is_string($name)) {
echo "文字列です";
}
配列かどうかを確認したい場合は is_array() を使います。
$items = ["apple", "banana"];
if (is_array($items)) {
echo "配列です";
}
フォーム入力やAPIレスポンスなど、外部から受け取るデータは想定通りの型とは限りません。
必要に応じて型チェックを行うと、安全に処理できます。
型変換
型変換とは
型変換とは、ある型の値を別の型に変えることです。
キャストとも呼ばれます。
例えば、文字列の "100" を整数の 100 に変換したい場合があります。
$value = "100";
$number = (int) $value;
var_dump($number);
出力結果は次のようになります。
int(100)
よく使うキャスト
PHPでは、次のようなキャストが使えます。
(int) $value
(float) $value
(string) $value
(bool) $value
(array) $value
例えば、数値を文字列に変換することもできます。
$value = 100;
$text = (string) $value;
var_dump($text);
出力結果は次のようになります。
string(3) "100"
フォームの値は基本的に文字列として扱う
フォームから送信された値は、基本的に文字列として扱われます。
例えば、フォームで価格を入力しても、PHP側では文字列として受け取ることがあります。
$price = $_POST["price"] ?? "0";
数値として計算するなら、必要に応じて型変換します。
$price = (int) ($_POST["price"] ?? 0);
ただし、実務では単純にキャストするだけでなく、入力値が正しい形式かどうかのバリデーションも重要です。
比較演算子の注意点
== は値だけを比較する
PHPでは、値を比較するときに == や === を使います。
== は、型をある程度変換したうえで値を比較します。
var_dump(10 == "10");
出力結果は次のようになります。
bool(true)
左側の 10 は整数、右側の "10" は文字列です。
しかし、== では型変換が行われるため、同じ値として判定されます。
=== は値と型の両方を比較する
=== は、値だけでなく型も比較します。
var_dump(10 === "10");
出力結果は次のようになります。
bool(false)
整数の 10 と文字列の "10" は、値としては似ていますが型が違います。
そのため、=== では false になります。
実務では、基本的に === を使うことをおすすめします。
$status = "active";
if ($status === "active") {
echo "有効です";
}
型の違いによる意図しない判定を防ぎやすくなります。
!= と !== の違い
等しくないことを判定する場合も、似た違いがあります。
var_dump(10 != "10");
var_dump(10 !== "10");
結果は次のようになります。
bool(false)
bool(true)
!= は型変換を行って比較します。
!== は値と型の両方を見て比較します。
そのため、厳密に比較したい場合は !== を使います。
isset()とempty()の違い
isset()とは
isset() は、変数や配列キーが存在していて、かつ値が null ではないかを確認する関数です。
$name = "田中";
if (isset($name)) {
echo "変数は存在します";
}
$name が存在していて、値も null ではないため、条件は true になります。
一方、値が null の場合は false になります。
$name = null;
var_dump(isset($name));
出力結果は次のとおりです。
bool(false)
配列のキー確認でisset()を使う
配列のキーが存在するか確認するときにも isset() はよく使われます。
$user = [
"name" => "田中"
];
if (isset($user["name"])) {
echo $user["name"];
}
このように書くと、存在しないキーにアクセスして警告が出るのを防ぎやすくなります。
値がnullでもキーの存在を確認したい場合
isset() は、値が null の場合に false を返します。
そのため、キーが存在するかどうかだけを確認したい場合は、array_key_exists() を使います。
$user = [
"name" => null
];
var_dump(isset($user["name"]));
var_dump(array_key_exists("name", $user));
出力結果は次のようになります。
bool(false)
bool(true)
isset() は「存在していて、かつ null ではないか」を確認します。
array_key_exists() は「キーが存在するか」を確認します。
この違いは、配列で null を意味のある値として扱う場合に重要です。
empty()とは
empty() は、変数が空とみなされるかどうかを判定する関数です。
$name = "";
if (empty($name)) {
echo "名前が空です";
}
empty() は、主に次のような値を空として扱います。
""
0
"0"
null
false
[]
特に注意したいのが、文字列の "0" も空扱いになる点です。
$value = "0";
if (empty($value)) {
echo "空です";
}
このコードでは、"0" が空と判定されます。
フォーム入力で "0" が有効な値になる場合、empty() を使うと意図しない判定になる可能性があります。
isset()とempty()の違い
isset() と empty() の違いを整理すると、次のようになります。
| 関数 | 判定内容 |
|---|---|
isset() | 変数が存在し、かつ null ではないか |
empty() | 値が空とみなされるか |
例えば、次のコードを見てください。
$value = "";
var_dump(isset($value));
var_dump(empty($value));
出力結果は次のようになります。
bool(true)
bool(true)
$value は存在しているため、isset($value) は true です。
しかし、中身は空文字なので、empty($value) も true になります。
未定義変数とnull合体演算子
未定義変数に注意する
まだ作っていない変数を使うと、警告が出ることがあります。
echo $name;
$name が定義されていない場合、PHPは未定義変数として警告を出すことがあります。
フォームやURLパラメータ、配列の値を扱うときは、値が存在するかどうかを確認することが重要です。
if (isset($_POST["name"])) {
$name = $_POST["name"];
} else {
$name = "";
}
null合体演算子 ??
PHPでは、値が存在しない場合に初期値を設定するために、null合体演算子 ?? を使えます。
$name = $_POST["name"] ?? "";
これは、次の意味です。
$_POST["name"] が存在し、nullでなければその値を使う。
存在しない、またはnullなら空文字を使う。
URLパラメータでもよく使います。
$page = $_GET["page"] ?? 1;
page が指定されていればその値を使い、指定されていなければ 1 を使います。
配列の値を安全に取り出す
連想配列から値を取り出すとき、キーが存在しない可能性がある場合は ?? を使うと便利です。
$user = [
"name" => "田中"
];
$email = $user["email"] ?? "";
この場合、email というキーは存在しませんが、警告を出さずに空文字を代入できます。
実務では、APIレスポンスやフォーム入力のように、値が必ず存在するとは限らないデータを扱うことが多いため、?? はよく使います。
スーパーグローバル変数
スーパーグローバル変数とは
PHPには、最初から用意されている特別な変数があります。
これをスーパーグローバル変数といいます。
代表的なものは次のとおりです。
| 変数 | 意味 |
|---|---|
$_GET | URLパラメータ |
$_POST | フォーム送信データ |
$_SERVER | サーバー情報 |
$_SESSION | セッション情報 |
$_COOKIE | Cookie情報 |
$_FILES | アップロードファイル |
$_REQUEST | リクエストデータ |
$GLOBALS | グローバル変数 |
$_GET の使い方
URLが次のようになっているとします。
example.com/?name=tanaka
PHPでは、$_GET を使って name の値を取得できます。
$name = $_GET["name"] ?? "";
echo $name;
$_GET は、URLパラメータを取得するときに使います。
検索条件、ページ番号、カテゴリーIDなどをURLから受け取る場合によく使われます。
$_POST の使い方
フォームから送信された値は、主に $_POST で受け取ります。
HTMLフォームの例です。
<form method="post">
<input type="text" name="username">
<button type="submit">送信</button>
</form>
PHP側では、次のように受け取れます。
$username = $_POST["username"] ?? "";
echo $username;
ただし、ユーザーが入力した値をそのまま画面に表示するのは危険です。
HTMLに出力するときは、エスケープ処理が必要です。
echo htmlspecialchars($username, ENT_QUOTES, "UTF-8");
$_REQUEST は使いどころに注意する
$_REQUEST は、GET、POST、COOKIEなどの値をまとめて扱える変数です。
ただし、どこから来た値なのか分かりにくくなるため、実務ではあまり安易に使わない方がよいです。
フォームから送られた値なら $_POST、URLパラメータなら $_GET のように、値の出どころを明確にした方が安全です。
$name = $_POST["name"] ?? "";
$page = $_GET["page"] ?? 1;
このように、目的に応じて明示的に使い分けることをおすすめします。
変数をHTMLに出力するときの注意
ユーザー入力をそのまま出力しない
PHPで変数をHTMLに出力するときは、ユーザー入力をそのまま表示しないことが重要です。
危険な例です。
$name = $_GET["name"] ?? "";
echo $name;
この場合、URLから受け取った値をそのままHTMLに出力しています。
悪意のある文字列が入力された場合、XSSと呼ばれる攻撃につながる可能性があります。
htmlspecialchars()でエスケープする
HTMLに出力するときは、htmlspecialchars() を使ってエスケープします。
$name = $_GET["name"] ?? "";
echo htmlspecialchars($name, ENT_QUOTES, "UTF-8");
HTMLの中で使う場合は、次のように書けます。
<p><?= htmlspecialchars($name, ENT_QUOTES, "UTF-8") ?></p>
<?= ... ?> は、<?php echo ...; ?> の短縮形です。
<p><?php echo htmlspecialchars($name, ENT_QUOTES, "UTF-8"); ?></p>
上記とほぼ同じ意味で使えます。
WordPressでは専用のエスケープ関数を使う
WordPressでは、用途に応じて専用のエスケープ関数を使います。
| 関数 | 主な用途 |
|---|---|
esc_html() | HTML本文に出力する |
esc_attr() | HTML属性に出力する |
esc_url() | URLを出力する |
例えば、記事タイトルをHTML内に出力する場合は次のように書きます。
<h1><?= esc_html($title) ?></h1>
リンクURLを出力する場合は、esc_url() を使います。
<a href="<?= esc_url($url) ?>">リンク</a>
HTML属性の中に値を出す場合は、esc_attr() を使います。
<input type="text" value="<?= esc_attr($name) ?>">
PHPやWordPressでは、値を「どこに出力するか」によって適切なエスケープ方法が変わります。
変数のスコープ
スコープとは
スコープとは、変数を使える範囲のことです。
PHPでは、関数の外で作った変数を、関数の中からそのまま使うことはできません。
$name = "田中";
function showName()
{
echo $name;
}
showName();
このコードは期待通りには動きません。
関数の外にある $name は、関数の中ではそのまま使えないためです。
関数の中で変数を定義する
関数の中で変数を使いたい場合は、関数の中で定義します。
function showName()
{
$name = "田中";
echo $name;
}
showName();
この場合、$name は関数の中で定義されているため、問題なく使えます。
外の値を関数に渡すなら引数を使う
関数の外にある値を関数の中で使いたい場合は、引数で渡すのが基本です。
function showName($name)
{
echo $name;
}
$userName = "田中";
showName($userName);
このように書くと、関数の外にある $userName の値を、関数の中の $name として使えます。
globalは使いすぎない
PHPでは、global を使うと関数の外の変数を関数内で使えます。
$name = "田中";
function showName()
{
global $name;
echo $name;
}
showName();
ただし、global を多用すると、どこで値が変更されたのか分かりにくくなります。
実務では、できるだけ引数で値を渡す書き方を優先した方がよいです。
定数との違い
変数は値を変更できる
変数は、後から値を変更できます。
$siteName = "サンプルサイト";
$siteName = "新しいサイト名";
echo $siteName;
表示されるのは、後から代入した値です。
新しいサイト名
変数は、処理の途中で変わる値を扱うときに使います。
定数は基本的に変更しない値に使う
定数は、基本的に変更しない値を扱うときに使います。
const SITE_NAME = "サンプルサイト";
または、define() を使って定義することもできます。
define("SITE_NAME", "サンプルサイト");
定数を使うときは $ を付けません。
echo SITE_NAME;
設定値や固定値など、途中で変えない値には定数を使うと分かりやすくなります。
strict_typesについて
strict_typesとは
PHPでは、ファイルの先頭に次のように書くことで、スカラー型の自動変換を抑えることができます。
<?php
declare(strict_types=1);
例えば、次のような関数があるとします。
<?php
declare(strict_types=1);
function add(int $a, int $b): int
{
return $a + $b;
}
echo add(1, 2);
この場合、整数を渡しているので問題なく動きます。
strict_typesを使うと型の誤りに気づきやすい
strict_types=1 を使うと、意図しない型の値を渡したときにエラーとして気づきやすくなります。
<?php
declare(strict_types=1);
function add(int $a, int $b): int
{
return $a + $b;
}
echo add("1", "2");
このように文字列を渡すと、厳密な型チェックによってエラーになります。
ただし、strict_types は少し誤解されやすい機能です。
主に関数呼び出し時のスカラー型に関係し、関数を定義したファイルではなく、呼び出し元ファイルの設定が影響します。
初心者の段階では必須ではありませんが、実務で品質を高めたい場合には理解しておきたい機能です。
実践例:商品価格を計算する
変数と数値を使った計算例
次の例では、商品名、価格、税率を変数に入れて、税込価格を計算しています。
$productName = "Tシャツ";
$price = 3000;
$taxRate = 1.1;
$totalPrice = round($price * $taxRate);
echo $productName . "の税込価格は" . $totalPrice . "円です。";
表示結果は次のようになります。
Tシャツの税込価格は3300円です。
このコードでは、次のようなデータ型が使われています。
| 変数 | データ型 | 内容 |
|---|---|---|
$productName | string | 商品名 |
$price | int | 税抜価格 |
$taxRate | float | 税率 |
$totalPrice | int / float | 計算結果 |
金額を扱う場合は、小数計算の誤差を避けるために、必要に応じて round() などで丸めるとよいです。
実践例:ログイン判定
boolとif文を使う例
次の例では、ログインしているかどうかを true / false で判定しています。
$isLogin = true;
$userName = "田中";
if ($isLogin) {
echo "こんにちは、" . $userName . "さん";
} else {
echo "ログインしてください";
}
表示結果は次のとおりです。
こんにちは、田中さん
$isLogin が true のため、ログイン中のメッセージが表示されます。
真偽値の変数には、isLogin、isPublished、hasImage のように、意味が分かる名前を付けると読みやすくなります。
実践例:記事一覧を表示する
配列とforeachを使う例
次の例では、複数の記事情報を配列で管理しています。
$posts = [
[
"title" => "PHPの基本",
"category" => "プログラミング"
],
[
"title" => "WordPressの使い方",
"category" => "CMS"
],
[
"title" => "SEOの基本",
"category" => "マーケティング"
]
];
foreach ($posts as $post) {
echo "<h2>" . htmlspecialchars($post["title"], ENT_QUOTES, "UTF-8") . "</h2>";
echo "<p>" . htmlspecialchars($post["category"], ENT_QUOTES, "UTF-8") . "</p>";
}
foreach を使うと、配列の中身を1つずつ取り出して処理できます。
HTMLテンプレートとして書くなら、次のようにすることもできます。
<?php foreach ($posts as $post): ?>
<article>
<h2><?= htmlspecialchars($post["title"], ENT_QUOTES, "UTF-8") ?></h2>
<p><?= htmlspecialchars($post["category"], ENT_QUOTES, "UTF-8") ?></p>
</article>
<?php endforeach; ?>
この書き方は、PHPとHTMLを分けて読みやすくしたいときに便利です。
実践例:フォーム入力を受け取る
POSTデータを安全に扱う例
フォームから送られてきた名前とメールアドレスを受け取る例です。
$name = $_POST["name"] ?? "";
$email = $_POST["email"] ?? "";
if ($name === "") {
echo "名前を入力してください";
} else {
echo "こんにちは、" . htmlspecialchars($name, ENT_QUOTES, "UTF-8") . "さん";
}
このコードでは、$_POST["name"] ?? "" を使って、値が送信されていない場合でもエラーになりにくいようにしています。
また、画面に表示するときは htmlspecialchars() を使ってエスケープしています。
フォーム入力はユーザーが自由に入力できるため、必ず安全に扱う必要があります。
初心者がつまずきやすいポイント
変数名の $ を忘れる
PHPでは、変数には必ず $ を付けます。
間違った例です。
$name = "田中";
echo name;
正しくは次のように書きます。
echo $name;
= と == と === を混同する
=、==、=== は意味が違います。
| 記号 | 意味 |
|---|---|
= | 代入 |
== | 値の比較 |
=== | 値と型の比較 |
代入の例です。
$name = "田中";
比較の例です。
$name == "田中";
厳密比較の例です。
$name === "田中";
実務では、条件分岐ではできるだけ === を使うと安全です。
文字列連結に + を使ってしまう
PHPで文字列をつなげるときは . を使います。
$name = "田中";
echo "こんにちは、" . $name . "さん";
+ は数値の足し算で使う演算子です。
文字列連結には使わないようにしましょう。
存在しない配列キーにアクセスする
次のように、存在しないキーにアクセスすると警告が出ることがあります。
$user = [
"name" => "田中"
];
echo $user["email"];
安全に取り出すなら、?? を使います。
$email = $user["email"] ?? "";
または、必要に応じて isset() で確認します。
if (isset($user["email"])) {
echo $user["email"];
}
empty()の判定に注意する
empty() は便利ですが、"0" も空扱いになります。
$value = "0";
if (empty($value)) {
echo "空です";
}
このコードでは、"0" が空と判定されます。
数量やコードなどで "0" が有効な値になる場合は、empty() ではなく、=== "" や === null など、目的に合った判定を使いましょう。
PHPの変数とデータ型を理解するための練習コード
型の違いを確認するコード
次のコードを実際に動かすと、PHPのデータ型の違いを確認できます。
<?php
$name = "田中";
$age = 25;
$height = 170.5;
$isLogin = true;
$hobbies = ["読書", "映画", "料理"];
$profile = null;
echo "<pre>";
var_dump($name);
var_dump($age);
var_dump($height);
var_dump($isLogin);
var_dump($hobbies);
var_dump($profile);
echo "</pre>";
出力例は次のようになります。
string(6) "田中"
int(25)
float(170.5)
bool(true)
array(3) {
[0]=>
string(6) "読書"
[1]=>
string(6) "映画"
[2]=>
string(6) "料理"
}
NULL
var_dump() を使うことで、変数の値だけでなく、型も確認できます。
PHPを学び始めた段階では、思った通りの型になっているかを確認する習慣を付けると理解が早くなります。
まとめ
PHPの変数は値を入れるための箱
PHPの変数は、値を一時的に保存するために使います。
$name = "田中";
$age = 25;
変数名には必ず $ を付けます。
echo $name;
変数名は大文字と小文字を区別するため、スペルミスや表記ゆれに注意が必要です。
PHPでよく使うデータ型
PHPで特によく使うデータ型は次のとおりです。
| 型 | 内容 | 例 |
|---|---|---|
string | 文字列 | "こんにちは" |
int | 整数 | 100 |
float | 小数 | 3.14 |
bool | 真偽値 | true |
array | 配列 | ["apple", "banana"] |
object | オブジェクト | $user->name |
null | 値がない | null |
最初は、string、int、float、bool、array、null をしっかり理解することが大切です。
実務で特に重要なポイント
PHPで実務的なコードを書くなら、次の点が重要です。
$name = $_POST["name"] ?? "";
このように、存在しない値に備えること。
if ($status === "active") {
// 処理
}
このように、比較ではできるだけ === を使うこと。
echo htmlspecialchars($name, ENT_QUOTES, "UTF-8");
このように、ユーザー入力をHTMLに出力するときは必ずエスケープすること。
PHPの変数とデータ型は、フォーム処理、WordPressテーマ制作、API連携、データベース処理、ログイン機能など、さまざまな場面で使う基礎です。
まずは、変数に値を入れる、型を確認する、配列を扱う、安全に出力する、という流れを理解すると、PHPのコードがかなり読みやすくなります。
以上、PHPの変数とデータ型についてでした。
最後までお読みいただき、ありがとうございました。










