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

search for in the

Classkit> <method_exists
Last updated: Fri, 13 Nov 2009

view this page in

property_exists

(PHP 5 >= 5.1.0)

property_exists オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる

説明

bool property_exists ( mixed $class , string $property )

この関数は、与えられたプロパティ property が 指定されたクラスに存在するかどうかを確認します。

注意: isset() とは対象的に、 プロパティの値が NULL の場合でも property_exists()TRUE を返します。

パラメータ

class

確認するクラス名、もしくはクラスのオブジェクトを指定します。

property

プロパティ名を指定します。

返り値

プロパティが存在している場合は TRUE、存在していない場合に FALSE、 エラー時には NULL を返します。

変更履歴

バージョン 説明
5.3.0 この関数は、アクセス権に依存せずにプロパティの存在確認を行うようになりました。

例1 property_exists() の例

<?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'));   //PHP 5.3.0 以降では true
var_dump(property_exists('myClass''bar'));    //false
var_dump(property_exists('myClass''test'));   //PHP 5.3.0 以降では true
myClass::test();

?>

参考

  • method_exists() - クラスメソッドが存在するかどうかを確認する



Classkit> <method_exists
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
property_exists
peter at nonumber dot nl
27-Aug-2008 09: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
12-Nov-2007 12: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 01: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 08: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 05: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 09: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 06: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 12: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));
  }
}
?>

Classkit> <method_exists
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites