1

我需要检查一个属性是否存在并且这有效:

class someClass {
  protected $some_var

  public static function checkProperty($property) {
    if(!property_exists(get_class()) ) {
      return true;
    } else return false;
  }
}

但是现在当我尝试扩展类时,它不再起作用了。

class someChild extends someClass {
  protected $child_property;

}


someChild::checkProperty('child_property'); // false

如何获得我想要的功能?我尝试用 , , 替换get_class()$this没有self任何static效果。

4

3 回答 3

0

我相信我已经找到了正确的答案。对于静态方法,使用get_called_class().

也许$this适用于对象方法。

于 2012-08-19T03:15:07.623 回答
0

对照 get_class() 和 get_parent_class() 检查 property_exists 怎么样?但是,对于更多的嵌套类,您必须递归地检查这些类。

public static function checkProperty($property)
{
    if (property_exists(get_class(), $property)
        or property_exists(get_parent_class(), $property))
    {
        return true;
    }
    else return false;
}

(抱歉,我更喜欢 Allman-Style ;-))

于 2012-08-19T04:19:39.530 回答
-1

以下作品:

<?php

class Car
{
    protected $_var;

    public function checkProperty($propertyName)
    {
        if (!property_exists($this, $propertyName)) {
            return false;
        }
        return true;
    }
}

class BMW extends Car
{
    protected $_prop;
}

$bmw = new BMW();
var_dump($bmw->checkProperty('_prop'));

@param $class 要测试的类名或类的对象

于 2012-08-19T03:04:43.560 回答