【问题标题】:Dynamic propery shows false to isset but very next line echos a value动态属性对 isset 显示错误,但下一行回显一个值
【发布时间】:2014-05-24 09:05:38
【问题描述】:

我在这里有点困惑。当一个对象的值没有被设置时,我需要抛出一个异常,但是不管它是否被设置,它都会抛出我的异常。

我跑

var_dump(isset($this->{$idName}));
var_dump($this->{$idName});

结果是

bool(false) 
string(1) "1" 

我希望第一个是真的。我错过了什么明显的东西吗?

为了明确起见,我正在尝试检查存储在$idName 中的对象的属性是否已设置。在这种情况下$idName = "id"
所以$this->id 是我正在检查的。

$this->id 将从 __get() 中检索

【问题讨论】:

  • 您确定$this->id 存在并且不是通过__get() 访问的吗?
  • 你在课堂上创建了一个神奇的 __isset() 方法吗?还是只有一个神奇的 __get() 方法?
  • 啊,是的,它来自 __get().. 那一定是我的问题。好的,打电话,如果你设置一个答案,我会接受,谢谢。

标签: php object properties


【解决方案1】:

如果此属性是私有的/受保护的,并且如果您尝试使用 $this->property 语法直接从外部访问其值,请确保它不只是来自您的类 __get() 魔术方法。

【讨论】:

    【解决方案2】:

    看起来您缺少神奇的 __isset() 方法。

    public function __isset($name)
    {
        return isset($this->data[$name]);
    }
    

    根据您存储数据的位置进行更改。

    来自Manual

    __isset() 通过在不可访问的属性上调用 isset() 或 empty() 来触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      相关资源
      最近更新 更多