我最近不得不使用Slim\Http\Message
和Slim\Http\Request
來獲取用戶發佈的數據。爲什麼要在oop中返回一個對象的克隆?
我注意到方法withBody()
中的一些東西,它返回對象的克隆而不是$this
。
這給我帶來了一些麻煩,因爲我無法讓我的應用程序工作,直到我將$request->withBody(...)
分配給變量($request
),然後在腳本中使用該新變量繼續使用。
我有一個模擬的例子來解釋(見代碼中的註釋);
class Request {
protected $body;
public function addBody($body) {
$clone = clone $this;
$clone->body = $body;
return $clone;
}
public function getBody() {
return $this->body;
}
}
$request = new Request;
// this will return NULL
$request->addBody([
'name' => 'john',
'email' => '[email protected]',
]);
var_dump($request->getBody());
// -----------------------
// but this will return the "body" that was passed in above.
$request = $request->addBody([
'name' => 'john',
'email' => '[email protected]',
]);
var_dump($request->getBody());
我看到這裏發生了什麼。但我不明白爲什麼一個類會像這樣實現。
有什麼好處?爲什麼要以這種方式限制開發人員?
您可能需要研究「[不可改變的對象(https://blog.joefallon.net/2015/08/immutable-objects -in-PHP /)」。 – Fildor
和函數式編程 –
投票結束爲基於意見。嘗試https://softwareengineering.stackexchange.com我無法投票遷移它 –