property_exists

(PHP 5 >= 5.1.0)

property_exists — Checks if the object or class has a property

Описание

bool property_exists ( mixed $class , string $property )

This function checks if the given property exists in the specified class (and if it is accessible from the current scope).

Замечание: As opposed with isset(), property_exists() returns TRUE even if the property has the value NULL.

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

class

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

property

The name of the property

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

Returns TRUE if the property exists, FALSE if it doesn't exist or NULL in case of an error.

Примеры

Пример #1 A property_exists() example

<?php

class myClass {
    public 
$mine;
    private 
$xpto;

    static function 
test() {
        
var_dump(property_exists('myClass''xpto')); // true, it can be accessed from here
    
}
}

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

?>

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

Коментарии

Автор:
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

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