天天看點

Yii2 VS thinkphp5.0

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中,普通控制器提供一個tink\Controller對象,同時,架構也允許在應用中的控制器可以不繼承think\Controller。同樣rest請求中,TP5中提供一個think\Controller\Rest的類做為控制器。注意,think\Controller\Rest 跟think\Controller沒有任何關系。。。。。。think\Controller中提供一個validate的方法進行資料驗證,但是think\Controller\Rest 中沒有這個方法。同時,還有一些其他方法也不同。

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要讓人家插入一條資料庫在查詢一次去擷取資料嗎?

時間差不多,後續接着更新。歡迎大家關注。