get_object_vars

関数の概要

PHPの get_object_vars 関数は、指定したオブジェクトのプロパティを連想配列として取得するための関数です。オブジェクトの公開されているプロパティ(publicなプロパティ)だけが対象となり、その名前をキー、値を配列の値として返します。オブジェクトの内部状態を配列で扱いたい場合に便利です。

パラメータの説明

  • object(必須):プロパティを取得したい対象のオブジェクト

戻り値

指定したオブジェクトの公開されているプロパティとその値を、プロパティ名をキーとした連想配列で返します。もし引数がオブジェクトでない場合は空の配列を返します。

使用例

基本的な使い方

<?php
class User {
    public $name = '山田太郎';
    public $age = 30;
    protected $password = 'secret'; // protectedなので取得されない
}

$user = new User();
$props = get_object_vars($user);
print_r($props);
?>

上記のコードでは、Userクラスのオブジェクトから公開されているプロパティ(nameage)だけが配列で取得されます。passwordはprotectedなので結果に含まれません。

動的に追加したプロパティの取得

<?php
$obj = new stdClass();
$obj->title = "PHP入門";
$obj->pages = 220;

$vars = get_object_vars($obj);
var_dump($vars);
?>

stdClassのオブジェクトに動的にプロパティを追加しており、これらも問題なく配列として取得できます。

他のスコープのプロパティは取得されない

<?php
class Product {
    public $name = 'ノートPC';
    private $price = 120000;
    protected $discount = 15000;
}

$product = new Product();
$properties = get_object_vars($product);
print_r($properties);
?>

この例では pricediscount はprivate/protectedなので配列に含まれず、nameのみが結果に含まれています。

関連する関数

  • get_class_vars – クラスのすべてのプロパティのデフォルト値(静的含む)を配列で取得
  • property_exists – オブジェクトやクラスに指定したプロパティが存在するかを判定
  • get_object_id – オブジェクトのIDを取得(PHP 7.2以降)

まとめ

get_object_varsは、PHPオブジェクトの公開されているプロパティだけを連想配列として簡単に取得できる便利な関数です。実務では、オブジェクトのデータを配列操作やJSON変換の前処理として取り出す場面で役立ちます。privateやprotectedなプロパティは取得できない点に留意しましょう。