Newer
Older
hello-programmer-world / src / pages / php / 010-foundation.mdx
@h.sakamoto h.sakamoto 1 day ago 7 KB php
---
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>
    このサイトはサンプルです。&copy; 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!");
```