【发布时间】:2016-06-14 00:57:00
【问题描述】:
今天,我在测试我的应用时发现了一个问题,我不知道该如何解释:
我的条件很简单:
if(isset($entity->filter)) {
$var = "text";
}
服务器返回
对象{ id:0,名称:“a”,链接:“a”}
OK(返回预期对象)
但是当我把我的条件改成这样的时候:
if(isset($entity->filter["where"])) {
$var = "text";
}
服务器返回
对象{ id:0,名称:“a”,链接:“a”,过滤器:null }
错误(对象已设置“过滤器”属性)
你能解释一下,为什么第二个条件中的 isset() 函数会为我的对象设置“过滤器”属性吗?
// 编辑
我创建了一个测试PHP代码,可以重现上面的错误:
<?php
class testObj {
public function __set($name, $value) {
$this->$name = $value;
}
public function &__get($name) {
return $this->$name;
}
}
$obj = new testObj();
$obj->p1 = "test";
$obj->p2 = 10;
$obj->p3 = true;
var_dump($obj);
if(isset($obj->p4["arr"])) {
// do something
}
var_dump($obj);
输出
object(testObj)#1 (3) { ["p1"]=> string(4) "test" ["p2"]=> int(10) ["p3"]=> bool(true) } object(testObj)#1 (4) { ["p1"]=> string(4) "test" ["p2"]=> int(10) ["p3"]=> bool(true) ["p4" ]=> 空 }
【问题讨论】:
-
$entity->过滤这是字符串还是数组?
-
现在是未定义的,但如果定义了,它总是数组
-
试试
$entity->{filter["where"]} -
if(isset($entity->{filter["where"]}))==> 意外 [ .. -
对不起...
if(isset($entity->{$filter["where"]}))