downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

trait_exists> <method_exists
[edit] Last updated: Thu, 12 Jan 2012

view this page in

property_exists

(PHP 5 >= 5.1.0)

property_exists Checks if the object or class has a property

Descrierea

bool property_exists ( mixed $class , string $property )

This function checks if the given property exists in the specified class.

Notă:

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

Parametri

class

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

property

The name of the property

Valorile întoarse

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

Note

Notă:

Utilizarea acestei funcții va duce la utilizarea oricărui autoîncărcător înregistrat dacă clasa nu este cunoscută deja.

Notă:

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

Istoria schimbărilor

Versiunea Descriere
5.3.0 This function checks the existence of a property independent of accessibility.

Exemple

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

?>

Vedeți de asemenea



trait_exists> <method_exists
[edit] Last updated: Thu, 12 Jan 2012
 
add a note add a note User Contributed Notes property_exists
foddex at foddex dot net 22-Dec-2010 01:56
Note that before PHP 5.3.3, this function fails for private properties in base classes (which is fixed in 5.3.3)

<?php
class Base {
        private
$var = 1;

        public function
test() {
               
var_dump( property_exists( $this, 'var' ) );
        }
}

class
Derived extends Base {
}

$b = new Base();
$b->test();
$d = new Derived();
$d->test();
?>

Executing this code with PHP 5.0 <= x < 5.3 this script echoes (incorrect result):
bool(true)
bool(false)

Executing this code with PHP 5.3 this script echoes (correct result):
bool(true)
bool(true)
webmaster at thedigitalorchard dot ca 24-Apr-2010 09:56
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.
peter at nonumber dot nl 27-Aug-2008 02:48
The above PHP4 function did not work for me. This does:

<?php
if ( !function_exists( 'property_exists' ) ) {
    function
property_exists( $class, $property ) {
        if (
is_object( $class ) ) {
           
$vars = get_object_vars( $class );
        } else {
           
$vars = get_class_vars( $class );
        }
        return
array_key_exists( $property, $vars );
    }
}
?>
rayro at gmx dot de 11-Nov-2007 04:49
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)
caist at caist dot com 14-Oct-2007 06:19
A niet way to copy properties from one object to another avoiding stuff like:

$obj2 -> prop1 = $obj1 -> prop1;
$obj2 -> prop2 = $obj1 -> prop2;
$obj2 -> prop3 = $obj1 -> prop3;

...is this loop through all properties:

// copies all property values from obj1 to obj2
foreach ($obj1 as $prop_name => $prop_value)
{
    if (property_exists(get_class($obj2), $prop_name))
                 $obj2 -> {$prop_name} = $prop_value;
}
K 13-Jul-2007 01:11
to ssettl2 at google's mail >

1) Use self:: in static methods : http://php.net/language.oop5.static

2) Under the description title of this page : "This function checks if the given property exists in the specified class (and if it is ACCESSIBLE FROM THE CURRENT SCOPE)."

This is normal behaviour in PHP5.

Regards
Alan71 07-Aug-2006 10:57
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 08-Jun-2006 02:35
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.

<?
class Y {}
$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
?>
Pete W 01-Jun-2006 11:52
In a similar vein to the previous note, To check in PHP4 if an object has a property, even if the property is null:

<?php

if(array_key_exists('propertyName',get_object_vars($myObj)))
{
 
// ..the property has been defined

?>
timshel 14-Nov-2005 04:20
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($property, get_class_vars($class));
  }
}
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites