php Class для Json должен возвращать только установленные значения - PullRequest
1 голос
/ 21 июня 2019

У меня есть класс с несколькими свойствами, которые являются необязательными, но могут принимать пустое или нулевое значение. При преобразовании класса в объект JSON требуется, чтобы он возвращал только те свойства класса, которые установлены.

Я не могу отфильтровать окончательный результат, так как значение может быть нулевым или пустым, что является допустимой записью. Короче говоря, я хочу только те свойства, для которых были вызваны сеттер-функции.

<?php    
class MyClass{

public $property1;
public $property2;
public $property3;
public $property4;
public $property5;

public function setProperty1($property1){
    $this->property1 = $property1;
    return $this;
}

public function setProperty2($property2){
    $this->property2 = $property2;
    return $this;
}

public function setProperty3($property3){
    $this->property3 = $property3;
    return $this;
}

public function setProperty4($property4){
    $this->property4 = $property4;
    return $this;
}

public function setProperty5($property5){
    $this->property5 = $property5;
    return $this;
}
}

$obj = new MyClass();
$obj->setProperty1("p1");
$obj->setProperty2("");
$obj->setProperty3(null);
echo json_encode($obj);

Выход: {"property1":"p1","property2":"","property3":null,"property4":null,"property5":null}

Ожидаемая: {"property1":"p1","property2":"","property3":null}

1 Ответ

1 голос
/ 21 июня 2019

Поскольку все свойства уже объявлены, независимо от того, вызваны они или нет, вы получите их в своем ответе.

Удалите часть объявления, таким образом, вы получите только те свойства, для которых были вызваны установочные функции.

<?php

class MyClass{


    public function setProperty1($property1){
        $this->property1 = $property1;
        return $this;
    }

    public function setProperty2($property2){
        $this->property2 = $property2;
        return $this;
    }

    public function setProperty3($property3){
        $this->property3 = $property3;
        return $this;
    }

    public function setProperty4($property4){
        $this->property4 = $property4;
        return $this;
    }

    public function setProperty5($property5){
        $this->property5 = $property5;
        return $this;
    }
}

$obj = new MyClass();
$obj->setProperty1("p1");
$obj->setProperty2("");
$obj->setProperty3(null);
echo json_encode($obj);

Выход: - https://3v4l.org/biEPB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...