property_exists

関数の概要

PHPの property_exists 関数は、指定したクラスまたはオブジェクトに特定のプロパティ(メンバー変数)が存在するかどうかを調べるために使われます。クラス内で定義されているプロパティが存在するかを確認するときに便利で、動的にプロパティの有無を判定したい場合に重宝します。

パラメータの説明

  • class:調べたいクラス名の文字列、もしくはオブジェクトを指定します。
  • property:存在を確認したいプロパティ名(文字列)を指定します。

戻り値

プロパティが存在すれば true、存在しなければ false を返します。アクセス修飾子(public, protected, private)は問わず、すべてのプロパティを対象とします。

使用例

基本的な使い方

<?php
class User {
    public $name;
    private $email;
}

$user = new User();

var_dump(property_exists($user, 'name'));  // bool(true)
var_dump(property_exists($user, 'email')); // bool(true)
var_dump(property_exists($user, 'age'));   // bool(false)
?>

この例では、オブジェクト $user に ‘name’ と ‘email’ プロパティが定義されているため、trueが返ります。一方、存在しない ‘age’ は false です。

クラス名を文字列で指定する例

<?php
class Product {
    protected $price;
    public $name;
}

var_dump(property_exists('Product', 'price')); // bool(true)
var_dump(property_exists('Product', 'description')); // bool(false)
?>

クラス名(文字列)を渡しても同様にプロパティの存在がチェックできます。アクセス修飾子に関わらず検出可能です。

動的にプロパティの存在チェックを行う例

<?php
class Sample {
    public $foo;
    private $bar;
}

$prop = 'foo';
if (property_exists('Sample', $prop)) {
    echo "{$prop} プロパティは存在します。";
} else {
    echo "{$prop} プロパティは存在しません。";
}
?>

変数を使って動的にチェックできるため、APIやツールなどでユーザー入力などに基づいて確認する場合に有効です。

関連する関数

  • isset() – プロパティや変数がセットされていて null でないかを確認する
  • property_getter_exists() – マジックメソッドの getter 存在チェック(PHPには標準でないが独自実装で)
  • get_object_vars() – オブジェクトの公開されているプロパティ一覧を取得する
  • class_exists() – クラスが存在しているかどうかを確認する

まとめ

property_exists はPHPのクラスやオブジェクトにプロパティがあるかどうかを調べる非常に便利な関数です。アクセス修飾子に関係なく全てのプロパティを検出可能なため、オブジェクトの構造を動的に判断したい場面で役立ちます。特にフォームデータのバリデーションやAPIのレスポンス処理など、プロパティの有無によって処理を変えたい時に活躍します。