property_exists
PHP Manual
PHP Manual»Classes/Object Functions»property_exists

property_exists

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

property_exists — Checks if the object or class has a property

Description

function property_exists(object|string $object_or_class, string $property): bool

This function checks if the given property exists in the specified class.

Note:

As opposed with isset(), property_exists() returns true even if the property has the value null.

Parameters

object_or_class

The class name or an object of the class to test for

property

The name of the property

Return Values

Returns true if the property exists, false if it doesn't exist.

Examples

Example #1 A property_exists() example

<?php

class myClass {
    public $mine;
    private $xpto;
    static protected $test;

    static function test() {
        var_dump(property_exists('myClass', 'xpto')); //true
    }
}

var_dump(property_exists('myClass', 'mine'));   //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto'));   //true
var_dump(property_exists('myClass', 'bar'));    //false
var_dump(property_exists('myClass', 'test'));   //true
myClass::test();

?>

property_exists() returns true regardless of property visibility, detects dynamic properties added to instances (when the class uses #[AllowDynamicProperties]), and ignores __isset and __get magic methods.

Example #2 Visibility, dynamic properties, and magic methods

<?php

#[AllowDynamicProperties]
class MyClass {
    public $public;
    private $private;
    static protected $protectedStatic;

    // ignored by property_exists
    public function __isset(string $name): bool {
        return true;
    }

    // ignored by property_exists
    public function __get(string $name): string {
        return '';
    }
}

$instance = new MyClass();
$instance->instanced = 'abc';

var_dump(property_exists($instance, 'public'));          // true  (public)
var_dump(property_exists($instance, 'private'));         // true  (visibility ignored)
var_dump(property_exists($instance, 'protectedStatic')); // true  (visibility ignored)
var_dump(property_exists($instance, 'instanced'));       // true  (dynamic property on instance)
var_dump(property_exists($instance, 'undefined'));       // false (not declared, __isset ignored)

var_dump(property_exists(MyClass::class, 'public'));    // true
var_dump(property_exists(MyClass::class, 'instanced')); // false (dynamic props not on class)
var_dump(property_exists(MyClass::class, 'undefined')); // false

?>

The above example will output:

bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
bool(false)
bool(false)

Notes

Note:

Using this function will use any registered autoloaders if the class is not already known.

Note:

The property_exists() function cannot detect properties that are magically accessible using the __get magic method.

See Also

To Top