Laravel 5.x Illuminate\Http\Request 類 offsetSet(),merge(),replace() 方法的區別

Request是Laravel最常用類之一,今天碰到幾個功能類似的方法,仔細看了一下區別,這裏記錄一下以供日後參考。
爲什麼要用這些方法呢,因爲它們有區別去直接用箭頭操作符,直接用箭頭將在$request對象中直接定義一個public屬性。若使用不當,容易覆蓋保留屬性,如request, query等,導致異常產生。

offsetSet()方法:接受2個參數,鍵和值,用來向$request對象添加變量。
源碼:

/**
 * Sets a parameter by name.
 *
 * @param string $key   The key
 * @param mixed  $value The value
 */
public function set($key, $value)
{
    $this->parameters[$key] = $value;
}

merge()方法:接受1個數組參數,用來向$request對象批量添加變量。相當於多次使用offsetSet()方法。
源碼:

/**
 * Adds parameters.
 *
 * @param array $parameters An array of parameters
 */
public function add(array $parameters = [])
{
    $this->parameters = array_replace($this->parameters, $parameters);
}

replace()方法:接受1個數組參數,用來覆蓋$request對象的所有請求變量。
注意:原有request參數將被刪除,但不會刪除query中的參數,即url中的get參數。
源碼:

/**
 * Replaces the current parameters by a new set.
 *
 * @param array $parameters An array of parameters
 */
public function replace(array $parameters = [])
{
    $this->parameters = $parameters;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章