文字

ReflectionClass::hasProperty

(PHP 5 >= 5.1.0)

ReflectionClass::hasProperty检查属性是否已定义

说明

public bool ReflectionClass::hasProperty ( string $name )

检查指定的属性是否已定义。

参数

name

待检查的属性的名称。

返回值

如果有这个属性返回 TRUE ,否则返回 FALSE

范例

Example #1 ReflectionClass::hasProperty() 例子

<?php
class  Foo  {
    public    
$p1 ;
    protected 
$p2 ;
    private   
$p3 ;

}

$obj  = new  ReflectionObject (new  Foo ());

var_dump ( $obj -> hasProperty ( "p1" ));
var_dump ( $obj -> hasProperty ( "p2" ));
var_dump ( $obj -> hasProperty ( "p3" ));
var_dump ( $obj -> hasProperty ( "p4" ));
?>

以上例程的输出类似于:

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

参见

  • ReflectionClass::hasConstant() - 检查常量是否已经定义
  • ReflectionClass::hasMethod() - 检查方法是否已定义

用户评论:

[#1] rwilczek at web-appz dot de [2009-10-13 05:40:20]

Note, that this method does not guarantee, that you can get a property with ReflectionClass::getProperty().

ReflectionClass::hasProperty() considers the parent classes (ignoring however, that a private property is not inherited), while ReflectionClass::getProperty() and ReflectionClass::getProperties() don't care about inheritance.

(Tested with PHP 5.3.0)

<?php
class Foo
{
    private 
$x;
}

class 
Bar extends Foo
{
    
//
}

$foo = new ReflectionClass('Foo');
$bar = new ReflectionClass('Bar');

var_dump($foo->hasProperty('x'); // bool(true)
var_dump($bar->hasProperty('x'); // bool(true)

var_dump(get_class($foo->getProperty('x'))); //string(18) "ReflectionProperty"
try {
    
$bar->getProperty('x');
} catch (
ReflectionException $e) {
    echo 
$e->getMessage(); // Property x does not exist
}
?>

上一篇: 下一篇: