将json_encode应用于类时如何忽略特定值

Mar*_*nkt 5 php json

在编码为json时,有没有办法在php中忽略类的特定类属性.

例如,在带有jackson库的java中,我可以用@JsonIgnore注释全局变量来实现这一点.在PHP中有什么可比较的(最好是原生的)?

Roc*_*mat 5

一种方法是利用JsonSerializable界面.这使您可以创建json_encode()在类上调用时调用的函数.

例如:

class MyClass implements JsonSerializable{
    public $var1, $var2;

    function __construct($a1, $a2){
        $this->var1 = $a1;
        $this->var2 = $a2;
    }

    // From JsonSerializable
    public function jsonSerialize(){
        return ['var1' => $this->var1];
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,当json_encode()被调用时,只会var1被编码.

$myObj = new MyClass(10, 20);
echo json_encode($myObj); // {"var1":10}
Run Code Online (Sandbox Code Playgroud)

演示:https://eval.in/103959

注意:这仅适用于PHP 5.4+