类/对象 函数
在线手册:中文  英文

property_exists

(PHP 5 >= 5.1.0)

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

?>

参见


类/对象 函数
在线手册:中文  英文

用户评论:

webmaster at thedigitalorchard dot ca (2010-04-24 21:56:18)

According to my tests, isset() is 4 times faster than property_exists(), so use a combination of these functions in your programming for best performance.

For example:

<?php

$fld 
'somevar';

if (isset(
$this->$fld) || property_exists($this$fld)) {

}

?>

If your programming routinely checks a larger number of property names that are expected to exist, whereas a smaller number may not, then using isset(), as above, will result in faster execution of the programming.

rayro at gmx dot de (2007-11-11 16:49:37)

To check the existance of a property from outside the scope (even if it's not accessible) try/consider the following:

<?php
function property_exists_safe($class$prop)
{
  
$r property_exists($class$prop);
  if (!
$r) {
    
$x = new ReflectionClass($class);
    
$r $x->hasProperty($prop);
  }
  return 
$r;
}

class 
myClass {
    public 
$mine;
    private 
$xpto;

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

    static function 
test2() {
        
// true, it can be accessed from everywhere!
        
var_dump(property_exists_safe('myClass''xpto'));
    }
}

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::test1();
echo(
"\n");
var_dump(property_exists_safe('myClass''mine')); //true
var_dump(property_exists_safe(new myClass'mine')); //true
var_dump(property_exists_safe('myClass''xpto')); //true
myClass::test2(); //true
?>

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

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

Alan71 (2006-08-07 10:57:09)

This function is case-sensitive, so :

<?php
class Test {
   public 
$property;
   
   public 
foo() { echo($property); }
}

property_exists('Test''property');   // will return true
property_exists('Test''Property');   // will return false
?>

(under PHP5.1.2)

jcaplan at bogus dot amazon dot com (2006-06-08 14:35:09)

The documentation leaves out the important case of new properties you add to objects at run time.  In fact, property_exists will return true if you ask it about such properties.

<?php
class {}
$y = new Y;

echo isset( 
$y->prop ) ? "yes\\n" "no\\n"// no;
echo property_exists'Y''prop' ) ? "yes\\n" "no\\n"// no
echo property_exists$y'prop' ) ? "yes\\n" "no\\n"// no

$y->prop null;

echo isset( 
$y->prop ) ? "yes\\n" "no\\n"// no;
echo property_exists'Y''prop' ) ? "yes\\n" "no\\n"// no
echo property_exists$y'prop' ) ? "yes\\n" "no\\n"// yes
?>

timshel (2005-11-14 16:20:17)

I haven't tested this with the exact function semantics of 5.1, but this code should implement this function in php < 5.1:

<?php
if (!function_exists('property_exists')) {
  function 
property_exists($class$property) {
    if (
is_object($class))
      
$class get_class($class);

    return 
array_key_exists($propertyget_class_vars($class));
  }
}
?>

易百教程