其实很简单,在你用M实例化一个Model对象的时候,所有的Model都是继承Thinkphp的Model模型类。而在model模型类中有一个魔术方法__set,如果你对面向对象的魔术方法有了解的话,就知道__set是为不存在的属性进行赋值。这样通过__set 就把这些不存在属性放到了属性为关联数组的data中,如图:
当用户调用add方法时,检测是否传入data数据,如果没有则调用刚才存在属性data中的数据。如图: