---
layout: "@/layouts/MarkdownLayout.astro"
---
import Toc from "../../components/Toc.astro";
import DockerLink from "@/components/DockerLink.astro";
export const title = "基本的な書き方";
# {title}
## TOC
## 変数
PHPの変数は、ドル記号 (`$`) で始まります。JavaScriptの`let`や`const`のような宣言キーワードは不要で、値を代入すると変数が作成されます。
```php
$name = "Alice";
$age = 30;
echo "名前: " . $name; // "名前: Alice" と表示
```
[より詳しい型や変数の使い方...](/reference/010-foundation-php#変数)
## 配列
PHPの配列は、複数の値を一つの変数にまとめて格納するために使います。JavaScriptの配列と似ていますが、PHPでは大きく分けて2種類の配列があります。
### 数値添字配列
インデックス(添字)が `0` から始まる数値の配列です。
```php
// 果物のリスト
$fruits = ["Apple", "Banana", "Cherry"];
echo $fruits[1]; // "Banana" と表示
```
### 連想配列
各値に、数値の代わりに文字列のキー(名前)を関連付けた配列です。オブジェクトのように、値に名前を付けて管理したい場合に便利です。
```php
// ユーザーの情報
$user = [
"name" => "Bob",
"age" => 25,
"city" => "Tokyo"
];
echo $user["name"]; // "Bob" と表示
```
[配列の詳しい使い方...](/reference/010-foundation-php#配列-array)
## 関数
関数は、特定の処理をひとまとめにしたものです。`function` キーワードを使って定義し、名前を付けて呼び出すことで、同じ処理を何度も再利用できます。
```php
// 2つの数値を受け取って、その合計を返す関数
function add($a, $b) {
return $a + $b;
}
// 関数を呼び出す
$sum = add(5, 3);
echo $sum; // "8" と表示
```
[関数の詳しい使い方...](/reference/010-foundation-php#関数)
## if文による条件分岐
プログラムの流れを条件によって変えたい場合、`if`文を使います。
丸括弧 `()` の中に条件を書き、その条件が満たされる(`true`になる)場合だけ、波括弧 `{}` の中の処理が実行されます。
```php
$score = 85;
// もし score が 80以上なら
if ($score >= 80) {
echo "合格!";
}
```
条件が満たされなかった場合の処理は `else` を使って書きます。さらに、別の条件を続けたい場合は `elseif` を使います。
```php
$score = 75;
if ($score >= 80) {
echo "合格!";
} elseif ($score >= 60) {
echo "惜しい!あと少し!";
} else {
echo "不合格です。";
}
```
JavaScriptと同様に、PHPにも `==` と `===` の2種類の比較があります。
思わぬバグを防ぐため、型まで厳密に比較する `===` を使うことが推奨されます。
## for / foreach による繰り返し
配列などのまとまったデータに対して、同じ処理を順番に実行したい場合は繰り返し処理を使います。
### for文
昔ながらの書き方で、指定した回数だけ処理を繰り返します。配列の要素数だけ繰り返すことで、すべての要素にアクセスできます。
`count()` は配列の要素数を返す関数です。
```php
$prices = [1290, 859, 1247];
$total = 0;
for ($i = 0; $i < count($prices); $i++) {
$total = $total + $prices[$i];
}
echo "合計: " . $total; // 合計: 3396
```
### foreach文
PHPで配列の全要素を順番に処理する場合、`foreach`文を使うのが最も簡単で一般的です。
配列から要素を1つずつ取り出し、変数(以下の例では `$price`)に代入してブロック内の処理を実行します。
JavaScriptの`for...of`文に似ていますが、括弧内の書き方が少し異なります。
```php
$prices = [1290, 859, 1247];
$total = 0;
foreach ($prices as $price) {
$total = $total + $price;
}
echo "合計: " . $total; // 合計: 3396
```
連想配列の場合、キーと値の両方を取り出すこともできます。
```php
$user = [
"name" => "Bob",
"age" => 25,
];
foreach ($user as $key => $value) {
echo $key . ": " . $value . "<br>";
}
// name: Bob<br>age: 25<br> と表示される
```
## require / includeによるファイルの読み込み
<DockerLink href="/sample/php/include.php" />
```php file=public/sample/php/include.php "include" "require" "include_once" "require_once"
public/sample/php/include.php
```
<br />
<details>
<summary>呼ばれているファイルの内容を見る</summary>
```html file=public/sample/php/components/header.html
public/sample/php/components/header.html
```
<br />
```html file=public/sample/php/components/footer.html
public/sample/php/components/footer.html
```
<br />
```php file=public/sample/php/lib/varout.php
public/sample/php/lib/varout.php
```
</details>
phpでは、以下の4つの命令が用意されています。
- `require`
- `include`
- `require_once`
- `include_once`
これらは細かい動作の違いはありますが、他のファイルの内容を読み込むための命令です。
イメージは、その箇所に対象のファイルの中身をそのままコピー&ペーストしたように解釈されます。
具体的には、例に挙げた`include.php`は以下のように解釈されます。
これを改めてphpが実行するときに、その内容を以下のように解釈して実行します。
```php title="include.php (解釈後)" del={2,20,31} add={3-8,21-23,32-34}
<?php
require_once 'lib/varout.php';
function varout($var)
{
echo '<pre>';
var_dump($var);
echo '</pre>';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ファイルを読み込む</title>
</head>
<body>
<?php include './components/header.html'; ?>
<header>
<h1>Header Component</h1>
</header>
<main>
メインコンテンツ
</main>
<?php varout($_SERVER); ?>
<?php include './components/footer.html'; ?>
<footer>
このサイトはサンプルです。© 2026 Sample Company
</footer>
</body>
</html>
```
<br />
`require`と`include`の違いは、読み込むファイルが存在しない場合の挙動です。
`include`は警告を出して処理を続行しますが、`require`はファイルがないことを致命的なエラーとして処理を中断します。
また、`_once`が付くものは、同じファイルを複数回読み込むことを防ぎます。
例えば自作で便利な関数をまとめたファイルを作成していて、それを様々な箇所で利用するとします。
しかしその関数自体は1回だけ読み込めば良いものです。
そのような場合に`require_once`や`include_once`を使うことで、2回目以降の読み込みを無視してくれます。
```php
<?php
require_once 'lib/varout.php';
require_once 'lib/varout.php';
require_once 'lib/varout.php';
require_once 'lib/varout.php';
varout("Hello, World!");
```
<br />
これは1回目の読み込みだけが実行され、2回目以降は無視されます。
```php
<?php
function varout($var)
{
echo '<pre>';
var_dump($var);
echo '</pre>';
}
varout("Hello, World!");
```