我有一个PHP特征,我将在任何可以执行特定操作的模型中使用它。例如,其中一个操作是完成,其中completed_at用时间戳标记。
特征方法是:
/**
* @return $this
* @throws Exception
*/
public function markCompleted(){
if($this->canDoAction('complete')){
$this->completed_at = Carbon::now();
return $this;
}
}
在我的控制器中,我在一个可以执行此操作的模型上调用它,如下所示。
$app->markCompleted()->save();
$app当我查看它的内容时,它不是空的。
运行此命令将返回如下错误
local.ERROR: Call to a member function save() on null
难道$this不表示使用此特性的模型吗?
发布于 2018-06-02 07:26:16
阿尔法所说的另一种变体。
/**
* @return $this
* @throws Exception
*/
public function markCompleted(){
if($this->canDoAction('complete')){
$this->completed_at = Carbon::now();
}
return $this;
}
这样,您总是返回一个模型,并且如果需要,您可以在执行保存之前链接其他函数。
发布于 2018-06-02 04:53:51
如果条件不满足,那么将返回null
,所以不是单独调用save
,而是在该方法中调用,例如:
public function markCompleted()
{
if ($this->canDoAction('complete')) {
$this->completed_at = Carbon::now();
return $this->save(); // true/false
}
}
然后像这样使用它:
$app->markCompleted();
按照您编写的方式,即使条件不匹配,save
方法也会被调用,这是一个副作用。
https://stackoverflow.com/questions/50650764
复制相似问题