搜尋

首頁  >  問答  >  主體

php - toJson方法和jsonSerialize方法的差別?

我在看 IlluminateSupportMessageBag類別方法時,類別是這樣的:

use JsonSerializable;
use Illuminate\Contracts\Support\Jsonable;
....

class MessageBag implements Jsonable, JsonSerializable...

/*
 * Convert the object to its JSON representation.
 */
public function toJson ($options = 0) {
    return json_encode($this->jsonSerialize(), $options);
}

/*
 *Convert the object into something JSON serializable.
 */
public function jsonSerialize() {
    return $this->toArray();
}

請教各位前輩,toJson方法和jsonSerialize方法的差別是什麼呢?什麼時候會隱式呼叫呢?

大家讲道理大家讲道理2748 天前725

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-05-16 13:02:38

    參考文件:http://php.net/manual/zh/json...
    上程式碼:

    class j implements JsonSerializable{
        public function jsonSerialize(){
            return "Hello world!";
        }
    }
    echo json_encode(new j());

    JsonSerializable本身專門為json_encode序列化服務的,而toJson只是laravel的Jsonable的方法。

    也就是說,你使用json_encode對這個物件序列化的時候,會去呼叫jsonSerialize方法。

    而你的toJson,一般只是將json_encode函數封裝一下而已,只是為了語意化。

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 13:02:38

    這樣?

     public function jsonSerialize()
        {
            return $this->toArray();
        }
    
    public function toJson($options = 0)
        {
            return json_encode($this->jsonSerialize(), $options);
        }    

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 13:02:38

    我不太了解,幫你搜了個:
    http://www.cnblogs.com/gniele...

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 13:02:38

    謝邀!

    因為我沒用過larval,你可以貼出toJson方法和jsonSerialize方法的具體代碼麼

    回覆
    0
  • 取消回覆