php開發面試題---lavarel和tp的區別是什麼(嘔心整理)

php開發面試題---lavarel和tp的區別是什麼(嘔心整理)

1、總結

一句話總結:

反思的回顧很是有用,由於決定了個人方向和技巧
以戰養己,這是很是很是好的方式
主要從大小、功能、安全性、操做等方面分析

 

一、lavarel的優勢有哪些?

一、火:全球第一php框架,功能強大,社區活躍
二、巨匠型開發框架:Lavavel一直秉承着優雅的原則,很好的支持了composer,實現了更豐富的擴展,社區文檔活躍,相較於TP,Lavavel更龐大,安全性也更高,更適合開發大中型項目,被稱爲「巨匠型開發框架」。

 

二、tp的優勢有哪些?

一、國人開發,中文文檔,入門簡便,適合中小型項目
二、ThinkPhp簡單、快速,基於MVC和麪向對象,易用性較高,是一款簡潔實用的輕量級框架。

 

三、lavarel和tp的區別是什麼?

大小:tp輕量級,lavarel巨匠型
功能:lavarel更強大,也更大,好比tp裏面就沒有廣播
安全性:防csrf攻擊
操做:一、路由;二、中間件 與 前置操做和鉤子

Laravel 在請求須要先定義路由,Tp5能夠不定義,有pathinfo路由便可訪問。
Laravel 在請求以前會有中間件, Tp5會有前置操做和鉤子。php

 

 

 

2、Laravel 和 Tp5的一些區別

1.0 Laravel 在表單提交的時候會有csrf 跨站請求僞造驗證,Tp5則沒有。
2.0 Laravel 在請求須要先定義路由,Tp5能夠不定義,有pathinfo路由便可訪問。
3.0 Laravel 在請求以前會有中間件, Tp5會有前置操做和鉤子。html

 

參考:Laravel 和 Tp5的一些區別 - 簡書
https://www.jianshu.com/p/03e4ac7e3fa3前端

 

4、參考:laravel與TP的區別

一、TP框架:

ThinkPhp簡單、快速,基於MVC和麪向對象,易用性較高,是一款簡潔實用的輕量級框架。

二、Laravel框架:

     Lavavel一直秉承着優雅的原則,很好的支持了composer,實現了更豐富的擴展,社區文檔活躍,相較於TP,Lavavel更龐大,安全性也更高,更適合開發大中型項目,被稱爲「巨匠型開發框架」。

我的感受TP5和Laravel框架的區別已經很小了,相較於TP3,TP5支持了composer安裝,配置文件位置變化,支持了閉包函數,驗證方式也跟Lavarel類似,數據返回方面也可使用return進行數據返回。

三、區別

1)提交數據的方式,Laravel在提交表單時須要在表單中加入{csrf_field}來防止跨域攻擊,而TP不會。

2)路由,Laravel必須先定義,再使用,路由文件爲routes.php,TP在配置文件中開啓路由後,路由格式是:'路由表達式' => '路由地址和參數'(使用路由的前提是URL支持phthinfo而且開啓路由),路由可使URL更符合SEO。

3)中間件,Laravel的中間件,中間件就是HTTP請求到達以前通過的層,經過中間件咱們能夠驗證用戶是否登陸等一些通用操做。

4)操做數據庫方式,均可以使用實例化(創建相對應的模型類)和DB:table('表名')來操做數據庫,使用原生查詢時不太相同,Laravel使用Db::操做('原生sql'),TP使用Db::query('原生sql');

5)Laravel升級十分簡易,而TP大版本的升級要重構代碼。nginx

 

Laravel最大的強項是充分運用了PHP面向對象的特行和軟件工程的思想,是一個幾近解耦的框架(它引入了各類各樣的設計模式,如IOC模式、以來注入等)。laravel

 

參考:laravel與TP的區別 - Rerise的博客 - CSDN博客
https://blog.csdn.net/jiangnanqbey/article/details/80860156web

 

5、 TP與laravel簡介

一、Tp

 

ThinkPHP是一個快速、簡單的基於MVC和麪向對象的輕量級PHP開發框架,遵循Apache2開源協議發佈,從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,尤爲注重開發體驗和易用性,而且擁有衆多的原創功能和特性,爲WEB應用開發提供了強有力的支持。 3.2版本的服務器環境要求以下: PHP5.3以上版本

 

二、Laravel

 

Laravel是一個簡單優雅的PHP Web開發框架,能夠將開發者從意大利麪條式的代碼中解放出來,經過簡單、高雅、表達式語法開發出很棒的Web應用,Laravel擁有更富有表現力的語法、高質量的文檔、豐富的擴展包,被稱爲「巨匠級PHP開發框架」。 laravel框架的安裝知足條件:

 

PHP版本 >= 5.5.9

 

PHP擴展:OpenSSL

 

PHP擴展:PDO

 

PHP擴展:Mbstring

 

PHP擴展:Tokenizer

 

Laravel須要依賴 Composer管理,必須首先安裝Composer。

 

2、tp與laravel的目錄結構

 

一、TP目錄結構:

├─index.php 入口文件

├─README.md README文件

├─Application 應用目錄

├─Public 資源文件目錄

└─ThinkPHP 框架目錄

核心代碼目錄:

├─ThinkPHP 框架系統目錄(能夠部署在非web目錄下面)

│├─Common 核心公共函數目錄

│├─Conf 核心配置目錄

│├─Lang 核心語言包目錄

│├─Library 框架類庫目錄

││ ├─Think 核心Think類庫包目錄

││ ├─Behavior 行爲類庫目錄

││ ├─Org Org類庫包目錄

││ ├─Vendor 第三方類庫目錄

││ ├─ ... 更多類庫目錄

│├─Mode 框架應用模式目錄

│├─Tpl 系統模板目錄

│├─LICENSE.txt 框架受權協議文件

│├─logo.png 框架LOGO文件

│├─README.txt 框架README文件

│└─index.php 框架入口文件

① C層放在application/home/controller中,M層在application/home/model,視圖放在application/home/view中。

② Tp裏面使用的模板引擎是smarty,因此傳值以及調用模板爲assign和display。

③ 實現了模板輸出的替換和過濾,如__APP__,__MODULE__,__URL__,__PUBLIC__等

④ 自帶一些緩存的方法,如S (數據緩存) F(快速緩存) cache(查詢緩存)以及靜態緩存

⑤ 對網站安全性有多重防禦,輸入過濾(I方法)、上傳安全、防止XSS攻擊、防止sql注入、表單合法性檢測(create方法建立數據對象的時候,可使用數據的合法性檢測,可使用insertFields 和 updateFiel

ds屬性或者field方法)等

⑥ ThinkPHP提供了靈活的全局配置功能,採用最有效率的PHP返回數組方式定義,支持慣例配置、公共配置、模塊配置、調試配置和動態配置,分別講述了在Apache、IIS、和nginx上的僞靜態配置。‘⑦ thinkphp 也採用了命名空間的方法用來區分每一個文件

⑧ 在ThinkPHP中基礎的模型類就是Think\Model類,該類完成了基本的CURD、ActiveRecord模式、連貫操做和統計查詢,一些高級特性被封裝到另外的模型擴展中。

⑨ 基礎模型類的設計很是靈活,甚至能夠無需進行任何模型定義,就能夠進行相關數據表的ORM和CURD操做,只有在須要封裝單獨的業務邏輯的時候,模型類纔是必須被定義的。

⑩ ThinkPHP有專門爲開發過程而設置的調試模式,開啓調試模式後,會犧牲必定的執行效率,但帶來的方便和除錯功能很是值得。

11  tp中session使用的很是靈活在任何頁面都可以隨意調取,不須要重複的引入,只須要開啓一次session能夠了。 tp中不須要反覆的寫路由tp框架的s ession機制在配置中文件中配置好就能夠用

12 使用系統內置的I函數是避免輸入數據出現安全隱患的重要手段,I函數默認的過濾方法是htmlspecialchars,若是咱們須要採用其餘的方法進行安全過濾,有兩種方式:

+-------------------------------------------------------------------------+

 

| 'DEFAULT_FILTER'        => 'strip_tags'

 

| 'DEFAULT_FILTER'        => 'strip_tags,stripslashes',

 

+--------------------------------------------------------------------------+

 

13若是你沒有使用I函數進行數據過濾的話,還能夠在模型的寫入操做以前調用filter方法對數據進行安全過濾,

 

如 $this->data($data)->filter('strip_tags')->add();

 

  二、Laravel目錄:

app目錄包含了應用的核心代碼;

 

bootstrap目錄包含了少量文件用於框架的啓動和自動載入配置,還有一個cache文件夾用於包含框架生成的啓動文件以提升性能; config目錄包含了應用全部的配置文件;

 

database目錄包含了數據遷移及填充文件,若是你喜歡的話還能夠將其做爲 SQLite 數據庫存放目錄;

 

public目錄包含了前端控制器和資源文件(圖片、JavaScript、CSS等);

 

resources目錄包含了視圖文件及原生資源文件(LESS、SASS、CoffeeScript),以及本地化文件;

 

storage目錄包含了編譯過的Blade模板、基於文件的session、文件緩存,以及其它由框架生成的文件,該文件夾被細分爲成app、framework和logs子目錄,app目錄用於存放應用要使用的文件,framework目錄用於存放框架生成的文件和緩存,最後,logs目錄包含應用的日誌文件;

 

tests目錄包含自動化測試,其中已經提供了一個開箱即用的PHPUnit示例;

 

vendor目錄是laravel的核心代碼庫,包含Composer依賴;

 

M層放在在app下面,不用再給專門的文件夾,app/Http下面有個routes.php,專門存放路由,每一個控制器裏的方法必須都要有,app/Http/Controller下面放的是控制器,resources/views下面放的是模版,以.blade.php爲結尾。配置數據庫信息能夠直接在。Env文件中修改就能夠了。

 

①laravel框架對環境有要求,5.2版本的laravel要求php5.5.9以上,還要開一些擴展。

②在瀏覽器中請求的路由經過app/Http/routes.php進行解析,在進入相應的控制器方法,有get、post、any、match等一些方法③傳值、調用模板return view('user.profile', ['user' => $user]);

④設置session值:默認session只能在本方法中獲取,能夠在app/Http/kernel.php設置。

+-------------------------------------------------------------------------+


| session(['chairs' => 7, 'instruments'=> 3]);

| session()->get('key');session()->put('key', $value);session(‘key’)


+--------------------------------------------------------------------------+

也能夠用$request->session()->get()/put()設置

Laravel的session的配置文件配置在app/config/session.php中session的永久保存(在不過時範圍內)Session::put('key', 'value');

Session驅動(file,cookie,database,memcached,array)

配置文件爲config/session.php

默認使用文件驅動

File session數據存儲在storage/framework/session目錄下

Cookie session數據儲存在通過加密的cookie中

Database session數據儲存在數據庫中
Memcached/redis session數據存儲在memcached/redis中
Array session數據存儲在簡單地數組中,非持久化(經常使用於運行測試)

⑤在AppServiceProvider中使用share方法能夠是全部模板共享數據
⑥{{ $a}}是內置的輸出數據的方法,默認被轉義,可使用{!!$a!!}輸出本來代碼而不會被轉義
⑦@foreach @endforeach @if @elseif @else @endif
⑧模板繼承能夠在視圖中使用同一個主模板,節省代碼,方便管理
⑨數據庫操做可使用原生sql語句也可使用查詢構建器

 

3、Laravel與Tp的路由
一、laravel路由
laravel必須先定義路由,全部應用路由都定義在app/Http/routes.php文件中。
默認狀況下,routes.php 文件包含單個路由和一個路由羣組,該路由羣組包含的全部路由都使用了中間件組 web,而這個中間件組爲路由提供了 Session 狀態和 CSRF 保護功能。
而thinkphp中開啓路由:「URL_ROUTER_ON」=true;
路由規則的定義格式爲: '路由表達式'=>'路由地址和參數'。 二、TP路由
要使用路由功能,前提是你的URL支持PATH_INFO並開啓路由路由規則的定義格式爲: '路由表達式'=>'路由地址和參數'

 

4、Laravel與Tp基本配置與視圖以及Laravel的中間件

一、laravel視圖

視圖文件存放在 resources/views 目錄

判斷視圖是否存在用 view()->exists() 在全部視圖之間共享數據片斷,這時候可使用視圖工廠的share方法,一般,須要在服務提供者的boot 方法中調用 share 方法,你能夠將其添加到 AppServiceProvider 或生成獨立的服務提供者來存放它們:

 

二、數據顯示

Blade 的 {{}} 語句已經通過 PHP 的htmlentities 函數處理以免 XSS 攻擊。 Blade 的 @include 指令容許簡單的在一個視圖中包含另外一個 Blade視圖,能夠傳遞參數到被包含的視圖@include('view.name', ['some' => 'data'])

 

三、Tp視圖

賦值assign調用頁面display

在當前模版文件中包含其餘的模版文件使用include標籤,Include標籤支持在包含文件的同時傳入參數
 

四、laravel基本配置

Laravel框架的全部配置文件都存放在 config 目錄下。

.env中的全部配置及其值被載入到 PHP 超全局變量 $_ENV 中

五、Tp配置::
公共配置文件(默認位於Application/Common/Conf/config.php)。獲取已經設置的據庫鏈接 參數值:C('參數名稱')

 
六、laravel的中間件

Laravel框架自帶了一些中間件,包括維護模式、認證、CSRF保護中間件等。全部的中間件都位於app/Http/Middleware 目錄下。

能夠將中間件看作 HTTP 請求到達目標動做以前必須通過的「層」,每一層都會檢查請求而且能夠徹底拒絕它。分配中間件到路由

首先應該在 app/Http/Kernel.php 文件中分配給該中間件一個簡寫的 key,默認狀況下,該類的 $routeMiddleware 屬性包含了 Laravel 內置的入口中間件,添加你本身的中間件只須要將其追加到後面併爲其分配一個 key:

中間件在 HTTP Kernel 中被定義後,能夠在路由選項數組中使用 $middleware 鍵來指定該中間件: Route::get('admin/profile', ['middleware' => 'auth', function (){ // }]);
 

5、Laravel與Tp數據庫

一、laravel數據庫

Laravel 支持四種類型的數據庫系統:MySQLPostgres SQLite SQL Server 能夠配置讀寫分離

運行原生 SQL 查詢

DB方法:select, update,insert, delete, 和statement。數據庫事務全部的填充類都位於database/seeds目錄

在run方法中,能夠插入任何你想插入數據庫的數據

可使用 Artisan 命令db:seed來填充數據庫

二、Tp數據庫

目前的數據庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支持。

6、 Laravel與Tp的防範機制面試

 

 

參考:TP與laravel簡介 - 少昊 鷹 的 IT博客 - CSDN博客
https://blog.csdn.net/qq_33620483/article/details/78062502redis

相關文章
相關標籤/搜索