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;
}