【问题标题】:isset on static class attributes静态类属性上的 isset
【发布时间】:2011-04-24 16:37:40
【问题描述】:
class A {
    public static $foo = 42;
}

$class = 'A';
$attribute = 'foo';

var_dump(isset($class::$attribute)); //gives bool(false)

我如何检查这个静态属性是否存在于这个类中?

【问题讨论】:

  • 请停止在问题标题中写标签。
  • @Tomala Geret'kal:好的,下次我会做对的:)

标签: php oop static static-members isset


【解决方案1】:

使用variable variables:

var_dump(isset($class::$$attribute)); // the two dollars are intentional

如果您还没有 PHP 5.3,唯一准确的方法可能是使用 Reflection API

$reflectionClass = new ReflectionClass($class);
$exists = $reflectionClass->hasProperty($attribute) && $reflectionClass->getProperty($attribute)->isStatic();

【讨论】:

  • 谢谢,这行得通 :) 我会尽快接受你的回答(还剩 12 分钟):)
  • 哇,变量变量很快就会变得混乱。
  • @JohnP:您可能使用的是较旧的 PHP 版本。 $class:: 语法是在 PHP 5.3 中引入的。
  • @nikic:对于 PHP
  • @nikic 啊哈,就是这样。我还没有迁移到 5.3。在键盘上运行它以验证后,正要 -1 你。显然他们还没有迁移^_^
【解决方案2】:

在 5.3 中,你可以简单地做

var_dump(property_exists($class, $attribute));

【讨论】:

  • property_exists('class','attribute') 澄清这个答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2014-09-10
  • 2011-07-29
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多