PHPの予約語について

採用はこちら

PHPで変数名・関数名・クラス名などを付けるときは、予約語に注意する必要があります。

予約語とは、PHPが文法や標準機能のためにあらかじめ特別な意味を持たせている単語のことです。

たとえば、ifelseclassfunctionreturn などはPHPの構文で使われるため、名前として自由に使うことはできません。

予約語を誤って関数名やクラス名に使うと、構文エラーの原因になります。

また、構文上は使える場合でも、PHPの機能名と紛らわしい名前を付けると、コードの可読性や保守性が下がってしまいます。

この記事では、PHPの予約語の意味や種類、使えないケース、使えるケース、命名時の注意点について解説します。

目次

PHPの予約語とは

PHPの予約語とは、PHPが言語仕様として使うために確保している単語のことです。

たとえば、次のような単語はPHPの構文で使われます。

if
else
foreach
function
class
return
new
public
private
protected
namespace
use

これらはPHPが特別な意味を持つ単語として解釈するため、関数名やクラス名などにそのまま使うことはできません。

たとえば、次のようなコードは不適切です。

<?php

function return() {
    return 'Hello';
}

return は関数の戻り値を返すためのキーワードです。

そのため、関数名として使うことはできません。

また、次のようなクラス名も使用できません。

<?php

class if {
}

if は条件分岐に使うキーワードなので、クラス名としては使えません。

予約語とキーワードの違い

PHPで「予約語」といった場合、狭い意味では ifclass のようなキーワードを指します。

ただし、広い意味では次のようなものも含めて説明されることがあります。

種類
キーワードifclassfunctionreturn
型名intstringboolarray
特殊なクラス参照selfparentstatic
定義済みクラスstdClassExceptionClosure
定義済み定数PHP_VERSIONPHP_OS など
マジック定数__FILE____LINE____CLASS__

厳密には、キーワード・型名・定義済みクラス・マジック定数はそれぞれ性質が異なります。

しかし実務上は、これらをまとめて「PHPがすでに特別な意味を持たせている名前」と理解しておくとよいでしょう。

PHPの主な予約語・キーワード一覧

PHPには多くのキーワードがあります。

代表的なものは以下の通りです。

abstract
and
array
as
break
callable
case
catch
class
clone
const
continue
declare
default
die
do
echo
else
elseif
empty
enddeclare
endfor
endforeach
endif
endswitch
endwhile
eval
exit
extends
final
finally
fn
for
foreach
function
global
goto
if
implements
include
include_once
instanceof
insteadof
interface
isset
list
match
namespace
new
or
print
private
protected
public
readonly
require
require_once
return
static
switch
throw
trait
try
unset
use
var
while
xor
yield
yield from

これらの単語は、PHPの文法や言語構造で使われるため、独自のクラス名・関数名・定数名などに使うのは避ける必要があります。

ただし、すべてのキーワードが完全に同じ扱いになるわけではありません。

たとえば、readonly はPHP 8.1以降のキーワードですが、例外的に関数名として使うことはできます。

とはいえ、将来の互換性や読みやすさを考えると、予約語と同じ名前を自作の関数名やクラス名に使うのは避けたほうが安全です。

条件分岐で使われる予約語

条件分岐に関する代表的な予約語には、次のようなものがあります。

if
else
elseif
switch
case
default
match

たとえば、ifelse は条件によって処理を分けるために使います。

<?php

$score = 80;

if ($score >= 70) {
    echo '合格';
} else {
    echo '不合格';
}

このコードでは、ifelseecho がPHPのキーワードとして使われています。

match はPHP 8.0以降で使える構文です。

<?php

$status = 200;

$message = match ($status) {
    200 => 'OK',
    404 => 'Not Found',
    500 => 'Server Error',
    default => 'Unknown',
};

match は値に応じて結果を返す構文です。

PHP 8.0以降ではキーワードとして扱われるため、独自の関数名やクラス名に使うのは避けましょう。

繰り返し処理で使われる予約語

繰り返し処理に関する予約語には、次のようなものがあります。

for
foreach
while
do
break
continue
endfor
endforeach
endwhile

たとえば、配列の中身を順番に処理するときは foreach を使います。

<?php

$items = ['apple', 'banana', 'orange'];

foreach ($items as $item) {
    echo $item;
}

このコードでは、foreachas がキーワードとして使われています。

また、ループ処理を途中で抜けたい場合は break、次の繰り返しに進みたい場合は continue を使います。

<?php

for ($i = 1; $i <= 5; $i++) {
    if ($i === 3) {
        continue;
    }

    echo $i;
}

forifcontinue はすべてPHPの予約語です。

関数で使われる予約語

関数に関する代表的な予約語には、次のようなものがあります。

function
return
fn
global
static
yield
yield from

通常の関数を定義するときは function を使います。

<?php

function add($a, $b) {
    return $a + $b;
}

function は関数定義に使うキーワード、return は値を返すためのキーワードです。

PHP 7.4以降では、アロー関数を定義するために fn も使えます。

<?php

$double = fn($num) => $num * 2;

fn もPHPのキーワードなので、独自の関数名やクラス名として使うのは避けましょう。

クラス・オブジェクトで使われる予約語

クラスやオブジェクトに関する予約語には、次のようなものがあります。

class
new
extends
implements
interface
trait
abstract
final
public
protected
private
static
self
parent
clone
instanceof
insteadof
readonly

たとえば、クラスを定義するときは class、オブジェクトを作るときは new を使います。

<?php

class User
{
    private string $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
}

$user = new User('Taro');

このコードでは、classprivatestringpublicfunctionnew などが使われています。

publicprotectedprivate はアクセス権を指定するキーワードです。

<?php

class Article
{
    public string $title;
    protected string $slug;
    private string $body;
}

クラス名やメソッド名を考えるときは、これらのキーワードと同じ名前を避けるようにしましょう。

selfparentstatic の扱い

PHPでは、selfparentstatic も特別な意味を持ちます。

<?php

class Base
{
    public static function name()
    {
        return 'Base';
    }
}

class Child extends Base
{
    public static function show()
    {
        echo self::name();
        echo parent::name();
        echo static::name();
    }
}

それぞれの意味は次の通りです。

キーワード意味
self現在のクラスを参照する
parent親クラスを参照する
static実行時に呼び出されたクラスを参照する

これらはクラス内で特別な意味を持つため、クラス名として使うことはできません。

例外処理で使われる予約語

例外処理に関する予約語には、次のようなものがあります。

try
catch
finally
throw

例外処理では、エラーが発生する可能性のある処理を try に書き、エラーを catch で受け取ります。

<?php

try {
    throw new Exception('エラーが発生しました');
} catch (Exception $e) {
    echo $e->getMessage();
}

throw は例外を投げるためのキーワードです。

finally を使うと、例外の有無に関係なく最後に実行したい処理を書けます。

<?php

try {
    echo '処理を開始します';
} catch (Exception $e) {
    echo 'エラーが発生しました';
} finally {
    echo '処理を終了します';
}

ファイル読み込みで使われる予約語

PHPでは、別ファイルを読み込むために次のようなキーワードを使います。

include
include_once
require
require_once

例:

<?php

require_once 'config.php';
include 'header.php';

これらは関数のように見えますが、PHPでは言語構造として扱われます。

includerequire の主な違いは、読み込みに失敗したときの挙動です。

キーワード読み込み失敗時の挙動
include警告を出して処理を続ける
requireエラーになり処理が止まる
include_once同じファイルを一度だけ読み込む
require_once同じファイルを一度だけ読み込む

ファイル読み込みに関する単語も、関数名やクラス名として使うのは避けるべきです。

名前空間で使われる予約語

名前空間に関する予約語には、次のようなものがあります。

namespace
use
as

例:

<?php

namespace App\Controllers;

use App\Models\User as UserModel;

namespace は名前空間を宣言するために使います。

use はクラスや関数などを読み込むために使います。

as は別名を付けるときに使います。

LaravelやSymfonyなどのフレームワークでは名前空間を頻繁に使うため、namespaceuse の意味は押さえておくとよいでしょう。

型名として使われる予約語・予約された名前

PHPでは、型名として使われる単語にも注意が必要です。

代表的なものには、次のようなものがあります。

int
float
bool
string
array
callable
iterable
object
mixed
never
void
true
false
null
self
parent

たとえば、関数の引数や戻り値に型を指定するときに使います。

<?php

function greet(string $name): void
{
    echo 'Hello, ' . $name;
}

このコードでは、string が引数の型、void が戻り値の型として使われています。

そのため、次のように型名と同じ名前をクラス名にするのは避けましょう。

<?php

class string {
}

string はPHPの型名として特別な意味を持つため、クラス名として使うべきではありません。

また、mixednever などは比較的新しいPHPバージョンで使われるようになった型です。

古いPHPでは問題にならなかった名前が、新しいPHPでは予約された名前として扱われることがあります。

PHPのバージョンによって予約語は増える

PHPの予約語は、PHPのバージョンアップによって増えることがあります。

たとえば、次のようなキーワードや型名は、比較的新しいバージョンで追加・変更されています。

単語主な扱い
fnPHP 7.4以降のアロー関数で使用
matchPHP 8.0以降のmatch式で使用
mixedPHP 8.0以降の型として使用
readonlyPHP 8.1以降の読み取り専用プロパティなどで使用
neverPHP 8.1以降の戻り値型として使用
enumPHP 8.1以降の列挙型で使用

このように、PHPのバージョンが上がると、これまで問題なく使えていた名前が衝突する可能性があります。

たとえば、古いコードで match という名前を使っていた場合、PHP 8.0以降では問題になる可能性があります。

そのため、自作のクラス名・関数名・メソッド名を付けるときは、PHPの予約語になりそうな一般的すぎる単語を避けることが大切です。

readonly は例外的に関数名として使える

PHP 8.1以降では、readonly はキーワードとして扱われます。

ただし、readonly には例外があり、関数名として使うことは可能です。

<?php

function readonly()
{
    return 'readonly';
}

構文上はこのような関数を定義できます。

しかし、実務ではおすすめできません。

readonly はPHPの機能を表すキーワードとして使われるため、関数名にするとコードを読む人が混乱しやすくなります。

そのため、たとえ使用可能であっても、次のように別の名前にしたほうがよいでしょう。

<?php

function getReadOnlyValue()
{
    return 'readonly';
}

予約語は「使えるかどうか」だけでなく、「読みやすいか」「将来も安全か」という視点で避けることが重要です。

変数名には予約語を使えるのか

PHPでは、変数名は $ から始まります。

そのため、予約語と同じ文字列であっても、変数名として使える場合があります。

<?php

$class = 'primary';
$function = 'callback';
$return = true;
$array = [1, 2, 3];

これは構文上問題ありません。

たとえば、HTMLのCSSクラス名を扱う場合、$class という変数名は自然に使われることがあります。

<?php

$class = 'button button-primary';

echo '<a class="' . $class . '">リンク</a>';

ただし、次のような変数名は避けたほうがよいです。

<?php

$if = true;
$foreach = [];
$return = 'result';

構文上は使えても、PHPのキーワードと紛らわしく、コードの可読性が下がります。

変数名に予約語と同じ文字列を使う場合は、意味が明確で読みやすいかどうかを基準に判断しましょう。

パラメータ名にも使える場合がある

関数の引数名、つまりパラメータ名にも予約語と同じ文字列を使える場合があります。

<?php

function renderButton($class, $label)
{
    return '<button class="' . $class . '">' . $label . '</button>';
}

このように $class は、HTMLのクラス属性を表す変数としてよく使われます。

PHP 8.0以降では名前付き引数も使えるため、次のように呼び出すこともできます。

<?php

renderButton(
    class: 'button-primary',
    label: '送信'
);

ただし、これも可読性に注意が必要です。

$class$array のように意味が明確なものは問題ありませんが、$if$return$foreach のような名前は避けるのが無難です。

メソッド名やプロパティ名には使える場合がある

PHPでは、キーワードであっても、クラス内のメソッド名・プロパティ名・クラス定数名として使える場合があります。

たとえば、次のようなコードは文脈によっては使用できます。

<?php

class Sample
{
    public string $list = 'value';

    public function list()
    {
        return ['a', 'b', 'c'];
    }
}

list はPHPのキーワードですが、クラス内のメソッド名やプロパティ名としては使える場合があります。

ただし、class は例外的にクラス定数名として使えません。

<?php

class Sample
{
    // これは避けるべき
    public const class = 'value';
}

また、予約語と同じメソッド名やプロパティ名は、コードを読む人にとって紛らわしくなる場合があります。

そのため、構文上使える場合でも、実務ではできるだけ避けるのが安全です。

定義済みクラス名にも注意する

PHPには、あらかじめ用意されている定義済みクラスがあります。

代表的なものは以下です。

stdClass
Exception
ErrorException
Closure
Generator
Throwable
Error
TypeError
ParseError
ArithmeticError
DivisionByZeroError
AssertionError
Directory

たとえば、Exception は例外処理で使われる標準クラスです。

<?php

throw new Exception('エラーが発生しました');

そのため、自分で次のようなクラスを定義するのは避けるべきです。

<?php

class Exception {
}

PHPの標準クラス名と衝突すると、予期しないエラーや可読性の低下につながります。

キーワードとは性質が少し異なりますが、定義済みクラス名も「自作の名前として使わないほうがよい名前」と考えておきましょう。

マジック定数にも注意する

PHPには、実行される場所によって値が変わるマジック定数があります。

代表的なものは以下です。

__LINE__
__FILE__
__DIR__
__FUNCTION__
__CLASS__
__TRAIT__
__METHOD__
__NAMESPACE__

たとえば、__FILE__ は現在のファイルパスを表します。

<?php

echo __FILE__;

__LINE__ は現在の行番号を表します。

<?php

echo __LINE__;

これらは通常のキーワードとは性質が異なりますが、PHPが特別な意味を持たせている名前です。

自分で独自の変数名や定数名として使うものではありません。

ソフト予約語とは

PHPには、ソフト予約語と呼ばれるものもあります。

ソフト予約語とは、完全に使用禁止というわけではないものの、将来の互換性やPHPの機能との衝突を考えると使用を避けるべき単語です。

代表的なものには、次のような単語があります。

enum
resource
numeric

特に enum は、PHP 8.1以降で列挙型の宣言に使われます。

<?php

enum Status
{
    case Draft;
    case Published;
    case Closed;
}

enum はPHPの機能として使われるため、独自のクラス名や関数名として使うのは避けるべきです。

ソフト予約語は、現在のPHPバージョンでは動く場合があっても、将来のバージョンアップで問題になる可能性があります。

予約語を使ってしまった場合のエラー例

予約語を関数名やクラス名として使うと、構文エラーになることがあります。

たとえば、次のようなコードは不適切です。

<?php

function empty($value) {
    return $value === '';
}

empty はPHPの言語構造なので、関数名として使うべきではありません。

改善するなら、次のように意味が明確な名前にします。

<?php

function isEmptyValue($value) {
    return $value === '';
}

また、次のようなクラス名も不適切です。

<?php

class string {
}

string はPHPの型名として使われるため、クラス名として使うのは避ける必要があります。

改善例:

<?php

class TextValue {
}

さらに、条件分岐のキーワードをクラス名にすることもできません。

<?php

class if {
}

改善例:

<?php

class ConditionRule {
}

予約語を避けた命名例

予約語と衝突しそうな名前は、少し具体的な名前に置き換えると安全です。

避けたい名前改善例
classclassNamecssClasstype
functioncallbackhandlermethodName
returnresultresponsereturnValue
listitemsitemListrecords
matchmatchedResultpatternMatch
stringtextlabelmessage
arrayitemsdatarecords
objectentitymodelinstance
publicvisibilityisPublic
defaultdefaultValuefallback

ポイントは、単に予約語を避けるだけでなく、何を表す名前なのかがわかるようにすることです。

たとえば、HTMLのクラス属性を表すなら $class より $cssClass のほうが明確です。

<?php

$cssClass = 'button-primary';

処理結果を表すなら $return より $result のほうが自然です。

<?php

$result = calculateTotal($items);

配列を表すなら $array より $items$users のように、中身がわかる名前にすると読みやすくなります。

<?php

$users = ['Taro', 'Hanako', 'Yuki'];

WordPressやLaravelでも予約語に注意する

PHPの予約語は、WordPressやLaravelなどのフレームワークを使う場合にも注意が必要です。

たとえば、WordPressでは関数名がグローバルに定義されることが多いため、既存の関数名やPHPの予約語に近い名前を付けると、衝突や混乱の原因になります。

WordPressで独自関数を作る場合は、次のように接頭辞を付けるのが一般的です。

<?php

function mytheme_get_posts_list() {
    // 処理
}

Laravelでは、クラス名やメソッド名を自由に付けられますが、PHPの予約語やフレームワーク側でよく使われる名前と重ならないようにすることが大切です。

たとえば、モデル名に StringArrayList のような抽象的すぎる名前を使うより、ArticleProductCustomer のように具体的な名前を使ったほうが安全です。

予約語を覚えるより、命名ルールを意識する

PHPの予約語をすべて丸暗記する必要はありません。

実務では、次の考え方を押さえておくことが大切です。

まず、PHPの構文で使われる単語は名前に使わないようにします。

if
else
class
function
return
foreach
while
try
catch
throw

次に、型名として使われる単語も避けます。

int
float
string
bool
array
object
mixed
never
void

さらに、PHPの標準クラス名も避けます。

Exception
Closure
Generator
stdClass
Throwable

そして、PHPの新しい機能で使われる単語にも注意します。

match
fn
readonly
enum

このような名前を避け、より具体的で意味のある名前を付けることが、PHPで安全にコードを書くポイントです。

まとめ

PHPの予約語とは、PHPが文法や標準機能のために特別な意味を持たせている単語です。

代表的な予約語には、次のようなものがあります。

if
else
foreach
function
class
return
new
public
private
protected
static
try
catch
throw
namespace
use
match
readonly
string
int
array
object
mixed
null
true
false
self
parent

これらは、クラス名・関数名・定数名などに使うとエラーや混乱の原因になることがあります。

一方で、$class$array のように、変数名としては使える場合もあります。

また、クラス内のメソッド名やプロパティ名として使えるケースもあります。

しかし、構文上使える場合でも、予約語と同じ名前はできるだけ避けるのが安全です。

PHPの予約語を扱うときは、次のポイントを意識しましょう。

  • PHPの構文キーワードは名前に使わない
  • 型名をクラス名や関数名に使わない
  • 標準クラス名との衝突を避ける
  • PHPのバージョンアップで予約語が増えることに注意する
  • 変数名に使える場合でも、読みにくい名前は避ける
  • 迷ったら、より具体的で意味のわかる名前にする

予約語を正しく理解しておくと、PHPの構文エラーを防げるだけでなく、読みやすく保守しやすいコードを書けるようになります。

以上、PHPの予約語についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次