文字

property_exists

(PHP 5 >= 5.1.0, PHP 7)

property_exists检查对象或类是否具有该属性

说明

bool property_exists ( mixed $class , string $property )

本函数检查给出的 property 是否存在于指定的类中(以及是否能在当前范围内访问)。

Note:

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

参数

class

字符串形式的类名或要检查的类的一个对象

property

属性的名字

返回值

如果该属性存在则返回 TRUE ,如果不存在则返回 FALSE ,出错返回 NULL

注释

Note:

如果此类不是已知类,使用此函数会使用任何已注册的 autoloader。

Note:

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

更新日志

版本 说明
5.3.0 This function checks the existence of a property independent of accessibility.

范例

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, as of PHP 5.3.0
var_dump ( property_exists ( 'myClass' 'bar' ));     //false
var_dump ( property_exists ( 'myClass' 'test' ));    //true, as of PHP 5.3.0
myClass :: test ();

?>

参见

  • method_exists() - 检查类的方法是否存在

用户评论:

[#1] saurabh dot agarwal89 at gmail dot com [2015-05-27 11:17:45]

$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)

[#2] g dot gentile at parentesigraffe dot com [2015-03-05 09:02:31]

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()

[#3] ewisuri [gmail] [2014-02-15 04:37:43]

As of PHP 5.3.0, calling property_exists from a parent class sees private properties in sub-classes.

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

class Child extends P {
    private $prop1;
}

$child = new Child();
var_dump($child->test_prop('prop1')); //true, as of PHP 5.3.0

[#4] berimbolo [2014-02-02 13:44:01]

When you are testing for a property that has been added dynamically, you will need to provide a reference to the instance rather than the class name for the first parameter.

For example, for this code snippet:

class myClass {
public $var;
}

$obj = new myClass;
$obj->new_var = "new";

var_dump(property_exists('myClass', 'new_var') );
var_dump(property_exists($obj, 'new_var') );

Returns:
boolean false
boolean true

[#5] Nanhe Kumar [2014-01-17 22:39:11]

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

[#6] Stefan W [2013-09-03 01:23:03]

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:

<?php
namespace MyNS;

class 
{
    public 
$foo;
}

property_exists("A""foo");          // false
property_exists("\\MyNS\\A""foo");  // true
?>

上一篇: 下一篇: