property_exists

(PHP 5 >= 5.1.0)

property_exists Проверяет, содержит ли объект или класс указанный атрибут

Описание

bool property_exists ( mixed $class , string $property )

Функция проверяет, существует ли атрибут property в указанном классе.

Замечание:

В противоположность isset(), property_exists() возвращает TRUE даже если свойство имеет значение NULL.

Список параметров

class

Имя класса или объекта класса для проверки

property

Имя свойства

Возвращаемые значения

Возвращает TRUE, если свойство существует, FALSE - если оно не существует или NULL в случае ошибки.

Примечания

Замечание:

Вызов этой функции будет использовать все зарегистрированные функции автозагрузки, если класс еще не известен.

Замечание:

Функция property_exists() не определяет магически доступные свойства с помощью метода __get.

Список изменений

Версия Описание
5.3.0 Эта функция проверяет существование свойства вне зависимости от его доступности.

Примеры

Пример #1 Пример использования property_exists()

<?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, начиная с версии PHP 5.3.0
var_dump(property_exists('myClass''bar'));    //false
var_dump(property_exists('myClass''test'));   //true, начиная с версии PHP 5.3.0
myClass::test();

?>

Смотрите также

  • method_exists() - Проверяет, существует ли метод в данном классе

Коментарии

Автор:
If you are in a namespaced file, and you want to pass the class name as a string, you will have to include the full namespace for the class name - even from inside the same namespace:

<?
namespace MyNS;

class 
{
    public 
$foo;
}

property_exists("A""foo");          // false
property_exists("\\MyNS\\A""foo");  // true
?>
2013-09-03 04:23:03
http://php5.kiev.ua/manual/ru/function.property-exists.html
Автор:
<?php

class Student {

    protected 
$_name;
    protected 
$_email;
   

    public function 
__call($name$arguments) {
       
$action substr($name03);
        switch (
$action) {
            case 
'get':
               
$property '_' strtolower(substr($name3));
                if(
property_exists($this,$property)){
                    return 
$this->{$property};
                }else{
                    echo 
"Undefined Property";
                }
                break;
            case 
'set':
               
$property '_' strtolower(substr($name3));
                if(
property_exists($this,$property)){
                   
$this->{$property} = $arguments[0];
                }else{
                    echo 
"Undefined Property";
                }
               
                break;
            default :
                return 
FALSE;
        }
    }

}

$s = new Student();
$s->setName('Nanhe Kumar');
$s->setEmail('nanhe.kumar@gmail.com');
echo 
$s->getName(); //Nanhe Kumar
echo $s->getEmail(); // nanhe.kumar@gmail.com
$s->setAge(10); //Undefined Property
?>
2014-01-18 00:39:11
http://php5.kiev.ua/manual/ru/function.property-exists.html
Автор:
As of PHP 5.3.0, calling property_exists from a parent class sees private properties in sub-classes.

<?php
class {
    public function 
test_prop($prop) { return property_exists($this$prop); }
}

class 
Child extends {
    private 
$prop1;
}

$child = new Child();
var_dump($child->test_prop('prop1')); //true, as of PHP 5.3.0
2014-02-15 06:37:43
http://php5.kiev.ua/manual/ru/function.property-exists.html
The function behaves differently depending on whether the property has been present in the class declaration, or has been added dynamically, if the variable has been unset()

<?php

class TestClass {

    public 
$declared null;
   
}

$testObject = new TestClass;

var_dump(property_exists("TestClass""dynamic")); // boolean false, as expected
var_dump(property_exists($testObject"dynamic")); // boolean false, same as above

$testObject->dynamic null;
var_dump(property_exists($testObject"dynamic")); // boolean true

unset($testObject->dynamic);
var_dump(property_exists($testObject"dynamic")); // boolean false, again.

var_dump(property_exists($testObject"declared")); // boolean true, as espected

unset($testObject->declared);
var_dump(property_exists($testObject"declared")); // boolean true, even if has been unset()
2015-03-05 11:02:31
http://php5.kiev.ua/manual/ru/function.property-exists.html
$a = array('a','b'=>'c');
print_r((object) $a);
var_dump( property_exists((object) $a,'0'));
var_dump( property_exists((object) $a,'b'));

OUTPUT:
stdClass Object
(
    [0] => a
    [b] => c
)
bool(false)
bool(true)
2015-05-27 14:17:45
http://php5.kiev.ua/manual/ru/function.property-exists.html
Автор:
I needed a method for finding out if accessing a property outside a class is possible without errors/warnings, considering that the class might use the magic methods __isset/__get to simulate nonexistent properties.

<?php
// returns true if property is safely accessible publicly by using $obj->$prop
// Tested with PHP 5.1 - 8.2, see https://3v4l.org/QBTd1
function public_property_exists$obj$prop ){
 
// allow magic $obj->__isset( $prop ) to execute if exists
 
if( isset( $obj->$prop ))  return true;
 
 
// no public/protected/private property exists with this name
 
if( ! property_exists$obj$prop ))  return false;

 
// the property exists, but is it public?
 
$rp = new ReflectionProperty$obj$prop );
  return 
$rp->isPublic();
}

//// Test/demo
class {
  public   
$public    "I’m public!";
  protected 
$protected "I’m public!";
  private   
$private   "I’m public!";
  function 
__isset$k ){
    return 
substr$k0) === 'magic';
  }
  function 
__get$k ){
    if( 
$k === 'magic_isset_but_null')  return null;
    return 
"I’m {$k}!";
  }
}

$o = new C();
foreach( array(
 
'public''protected''private',
 
'magic''magic_isset_but_null',
 
'missing'
) as $prop ){
  if( 
public_property_exists$o$prop ))
        echo 
"\$o->{$prop} is a public property, its value is: ",
             
var_export$o->$proptrue ), "\n";
  else  echo 
"\$o->{$prop} is not a public property.\n";
}
/*
$o->public    is a public property, its value is: 'I’m public!'
$o->protected is not a public property.
$o->private   is not a public property.
$o->magic     is a public property, its value is: 'I’m magic!'
$o->magic_isset_but_null is a public property, its value is: NULL
$o->missing   is not a public property.
*/
2023-11-05 19:05:03
http://php5.kiev.ua/manual/ru/function.property-exists.html

    Поддержать сайт на родительском проекте КГБ