25    private function getPostTagNested()
 24    {
 23        if (!is_array($this->nearByParams->tag_id)
 22            || empty($this->nearByParams->tag_id)) {
 21            return null;
 20        }
 19
 18        $nestedQuery = new Nested();
 17        $nestedQuery->setPath('jz_post_2_tag');
 16
 15        $boolQuery = new BoolQuery();
 14        $boolQuery->addMust(new Terms('jz_post_2_tag.tag_id', $this->nearByParams->tag_id));
 13        $boolQuery->addMust(new Term([
 12            'jz_post_2_tag.listing_status' => 5,
 11        ]));
 10
  9        $nestedQuery->setQuery($boolQuery);
  8
  7        return $nestedQuery;
  6    }

tag_id 在有值的情况下,这个代码的地 22 行出现了一个 bug,发现 nearByParams->tag_id 的 tag_id 是 private 的,之后又发现在 nearByParams 这个对象里,实现了 __get 方法,empty 在执行的时候,先触发了 nearByParams 这个对象的 __isset 方法,之后才会调用 __get 方法。如果没有实现 __isset 方法,这个 empty 函数的调用就会出现错误的判断。