Yii2.0使用一年多了,最近因为原来公司狗带了,换了公司,开始使用tp5.0。之前也有使用过tp3.2的框架,但是每次问及各个框架之前的区别的时候,总是不觉得有什么区别。但是从目前对tp5一周的使用时间来看,tp5相对于yii2来说,确实是弱爆了。
1、Yii2所有的操作都是对象操作。所有的对象都继承Yii中的Object对象。TP中,有对象也有函数。TP中的各个对象没有明显的继承关系。各自为类,定义不同的属性以及方法。
2、Yii2架构组织明确,同一类的对象必定有一个父类,在父类中定义相同的方法。在TP中,同一类对象没有什么继承关系,有的完全没有任何关系,内部提供的一些方法也不同。
比如Controller类,在Yii中有yii/web/Controller,有yii/rest/Controller,同样是控制器,他们必定有一些相同的操作,所有相同的操作都会在yii/base/Controller类中定义,同时通过抽象方法的形式定义控制器必须实现的方法。
在TP5中,普通控制器提供一个tinkController对象,同时,框架也允许在应用中的控制器可以不继承thinkController。同样rest请求中,TP5中提供一个thinkControllerRest的类做为控制器。注意,thinkControllerRest 跟thinkController没有任何关系。。。。。。thinkController中提供一个validate的方法进行数据验证,但是thinkControllerRest 中没有这个方法。同时,还有一些其他方法也不同。
3. ORM的不同。
YII2中,数据model时跟数据表完全映射的。一个model对象就是一条数据记录。对象的属性数据就是记录中各字段的内容。TP5中,数据model时一数据表的操作对象。提供一些数据操作方法而已。
Yii2中,new model(),然后调用save()方法,这个model就是一个完整的数据表记录,数据表的多有字段映射成为对象属性。TP中的save()方法是把记录写入数据库。然后就没了。这里有个很大的问题就是写入数据库之后,当前model不具备数据表该记录的所有字段数据。
举个栗子:user表中有id,username,password,create_time,四个字段。create_time 在数据库中设置自动获取当前时间戳。
Yii2
$user = new User();
$user->username='test';
$user->password = md5('111111');
$user->save();
echo $user->create_time;
TP5
$user = new User();
$user->username='test';
$user->password = md5('111111');
$user->save();
echo $user->create_time;//报错,提示user对象没有create_time属性
更新的时候还好些,因为必须先把数据从数据库中查询出来才操作,所以,更新的时候是能获取数据表内所有字段信息。难道TP要让人家插入一条数据库在查询一次去获取数据吗?
时间差不多,后续接着更新。欢迎大家关注。