php8.5
Home/ Manual/ classobj / functions/ property_exists

property_exists

PHP function Edit on GitHub ✎

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

Checks if the object or class has a property

Description

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

A property_exists() example

php
<?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.

Visibility, dynamic properties, and magic methods

php
<?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:

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

Notes Uses-autoload

Note

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

See Also

Source: reference/classobj/functions/property-exists.xml · from the official PHP manual (php/doc-en)