$model->setScenario(‘update’); or $model->scenario = ‘update’;
这两个有啥不同,setScenario scenario 哪个是要被淘汰了吗
Yii框架下的对象属性都可以get和set
条条大路通罗马。
$model->setScenario(‘update’); or $model->scenario = ‘update’;
解释一下:
首先要说一下PHP的set和get,也是yii把php的set,get运用的很好的地方。
$model 是一个对象。 -> 是指向这个对象的属性,这个如果不懂就不用往下看了。
$model->setScenario(‘update’) 这样是正常的写法,因为在对象$model下面肯定设置了一个函数叫 setScenario。(具体这个函数在哪你可以自己找,不过肯定是存在的。)
就好比我们创建一个类,里面写setXxx(),然后new一个对象调用这个setXxx();说到这里,以上的都很好理解了。
重点是这里,$model->scenario 其实也没什么,也是yii把php的set,get运用的很好的地方(第二遍说了)
当执行$model->scenario($model对象没有这个函数 ,正常来说肯定报错,但是PHP回去执行魔术函数set)而在Yii里重写了这个set,大概意思就是public function __set(){Yii重写了这里,如果找不到scenario,这个函数,那他就会在前面加一个set。这样 ‘set’.$xxxx} 最后拼出来的就是setScenario,上面说了,setScenario这个是可定有的。所以,$model->scenario 这样执行,其实内部就是在 $model->setScenario(‘update’) 这样执行。