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 );
}
}
?>
property_exists
(PHP 5 >= 5.1.0)
property_exists — Verifica si el objeto o clase tiene una propiedad
Descripción
Esta función verifica si la propiedad dada existe en la clase especificada (y si es accesible desde el contexto actual).
Note: Al contrario que isset(), property_exists() devuelve TRUE incluso si la propiedad tiene el valor NULL.
Lista de parámetros
- clase
-
El nombre de clase o un objeto de la clase para hacer la prueba
- propiedad
-
El nombre de la propiedad
Valores retornados
Devuelve TRUE si la propiedad existe, FALSE si no existe o NULL en caso de un error.
Ejemplos
Example #1 Un ejemplo de property_exists()
<?php
class miClase {
public $mia;
private $xpto;
static function prueba() {
var_dump(property_exists('miClase', 'xpto')); // true, es accesible desde aquí
}
}
var_dump(property_exists('miClase', 'mia')); //true
var_dump(property_exists(new miClase, 'mia')); //true
var_dump(property_exists('miClase', 'xpto')); //false, no es pública
miClase::prueba();
?>
property_exists
peter at nonumber dot nl
27-Aug-2008 11:48
27-Aug-2008 11:48
rayro at gmx dot de
12-Nov-2007 01:49
12-Nov-2007 01: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
15-Oct-2007 03:19
15-Oct-2007 03: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 10:11
13-Jul-2007 10: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 07:57
07-Aug-2006 07: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 11:35
08-Jun-2006 11: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 08:52
01-Jun-2006 08: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
15-Nov-2005 01:20
15-Nov-2005 01: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));
}
}
?>
