Сегодня я обнаружил проблему, когда тестировал свое приложение, и я не знаю, как это объяснить:
У меня простое условие:
if(isset($entity->filter)) {
$var = "text";
}
Возврат сервера
Объект {id: 0, name: "a", link: "a"}
ОК (ожидаемый объект возвращен)
Но когда я изменил свое состояние на это:
if(isset($entity->filter["where"])) {
$var = "text";
}
Возврат сервера
Объект {id: 0, имя: "a", ссылка: "a", фильтр: null}
ОШИБКА (объект установил свойство "фильтр")
Не могли бы вы объяснить мне, почему функция isset () во втором условии устанавливает свойство "filter" для моего объекта?
// РЕДАКТИРОВАТЬ
Я создаю тестовый 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"] => строка (4) "test" ["p2"] => int (10) ["p3"] => bool (true)} объект (testObj ) # 1 (4) {["p1"] => строка (4) "test" ["p2"] => int (10) ["p3"] => bool (true) ["p4"] => НУЛЕВОЙ }
$entity->{filter["where"]}
- person Gavin   schedule 01.03.2016if(isset($entity->{filter["where"]}))
== ›неожиданно [.. - person pes502   schedule 01.03.2016if(isset($entity->{$filter["where"]}))
- person Gavin   schedule 01.03.2016print_r($entity);
проверьте это - person devpro   schedule 01.03.2016