這23個Laravel面試問題你是應該知道的!

下面由laravel教程欄目給大家介紹23 個你應該知道的 laravel 面試問題,希望對需要的朋友有所幫助!

探索下一次技術面試之前應該了解的前20個 Laravel 面試問題。

Q1:什么是Laravel?

主題:?Laravel難度: ?

Laravel?是一個免費的開放源代碼 PHP Web 框架,由 Taylor Otwell 創建,旨在遵循模型-視圖-控制器(MVC)架構模式開發 Web 應用程序。

來源:?codingcompiler.com

Q2: Laravel 與其他 Php 框架相比有哪些好處?

主題:?Laravel難度: ?

  • 與其他框架相比,設置和自定義過程既簡單又快速。
  • 內置認證系統
  • 支持多個文件系統
  • 預裝軟件包,例如 Laravel Socialite,Laravel cashier,Laravel elixir,Passport,Laravel Scout
  • PHP active record 實現的 Eloquent ORM (對象關系映射)
  • 內置命令行工具 “Artisan”,用于創建代碼框架,數據庫結構并構建其遷移

來源:?mytectra.com

Q3:解釋 Laravel 中的遷移

主題:?Laravel難度: ??

Laravel Migrations?類似于數據庫的版本控制,使團隊可以輕松地修改和共享應用程序的數據庫架構。遷移通常與 Laravel 的架構生成器搭配使用,以輕松構建應用程序的數據庫架構。

來源:?laravelinterviewquestions.com

Q4:Facade Pattern 有什么用?

主題:?Laravel難度: ??

Facades?為應用程序的服務容器中可用的類提供了一個 靜態 接口。Laravel facades 作為服務容器中基礎類的靜態代理,提供了簡潔、表達性強的語法的優勢,同時保持了比傳統靜態方法更高的可測試性和靈活性。

所有的 Laravel facades 都是在?IlluminateSupportFacades?命名空間中定義。
查看:

use IlluminateSupportFacadesCache;  Route::get('/cache', function () {     return Cache::get('key'); });

來源:?laravel.com

Q5:什么是服務容器?

主題:?Laravel難度: ??

Laravel?服務容器?是用于管理類依賴性和執行依賴性注入的工具。

來源:?laravel.com

Q6:什么是 Eloquent Models?

主題:?Laravel難度: ??

Laravel 附帶的 Eloquent ORM 提供了一個漂亮、簡單的 ActiveRecord 實現,用于處理數據庫。每個數據庫表都有一個對應的模型,用于與該表進行交互。通過模型,您可以查詢表中的數據,以及將新記錄插入表中。

來源:?laravel.com

Q7:什么是Laravel事件?

主題:?Laravel難度: ??

Laravel 事件提供了一個簡單的觀察者模式實現,允許訂閱和監聽應用程序中的事件。事件是程序檢測并處理的事故或事情。

以下是 Laravel 中的一些事件示例:

  • 新用戶注冊
  • 發布新評論
  • 用戶登錄/注銷
  • 添加了新產品。

來源:?mytectra.com

Q8:你對 Laravel 中的查詢生成器了解多少?

主題:?Laravel難度: ???

Laravel 的數據庫查詢構建器為創建和運行數據庫查詢提供了方便,流暢的接口。它可以用于在應用程序中執行大多數數據庫操作,并且可以在所有支持的數據庫系統上工作。

Laravel 查詢構建器使用 PDO 參數綁定來保護應用程序免受 SQL 注入攻擊。無需清除作為綁定傳遞的字符串。

查詢生成器的一些功能:

  • 分塊
  • 聚合
  • Selects
  • 原生方法
  • Joins
  • Unions
  • Where 語句
  • Ordering,Grouping,Limit,& Offset

Source:?laravel.com

Q9:如何生成遷移?

主題:?Laravel難度: ???

遷移就像您數據庫的版本控制一樣,使您的團隊可以輕松地修改和共享應用程序的數據庫架構。遷移通常與 Laravel 的架構構建器搭配使用,以輕松構建應用程序的數據庫架構。

要創建遷移,使用 make:migration Artisan 命令:

php artisan make:migration create_users_table

新的遷移將放置在您的 database/migrations 目錄中。每個遷移文件名都包含一個時間戳,該時間戳使 Laravel 可以確定遷移的順序。

來源:?laravel.com

Q10:如何 mock 一個靜態 facade 方法?

主題:Laravel
難度:???

Facades 為應用程序的服務容器中可用的類提供“靜態”接口。與傳統的靜態方法調用不同,Facades 是可被 mock 的。我們可以使用 shouldReceive 方法 mock 對靜態外觀方法的調用,該方法將返回 Mockery mock 的實例。

// 實際代碼 $value = Cache::get('key');  // 測試 Cache::shouldReceive('get')                     ->once()                     ->with('key')                     ->andReturn('value');

來源:?laravel.com

Q11:Eager Loading 有什么好處,何時使用?

主題:?Laravel難度: ???

當訪問 Eloquent 關系作為屬性時,關系數據是 “Lazy Loaded” 的。這意味著直到您首次訪問該屬性,關系數據才被實際加載。但是,Eloquent 可以在查詢父模型時 “Eager Load” 關系。

當我們有嵌套對象時(例如書本->作者),Eager Loading 減輕了 N + 1 查詢的問題。我們可以使用 Eager Loading 將此操作減少為僅2個查詢。

來源:?FullStack.Cafe

Q12:本地作用域有何用?

主題:?Laravel難度: ???

Scopes?允許您輕松地在模型中復用查詢邏輯。要定義 scope,只需在模型方法的前面加上 scope:

class User extends Model {     public function scopePopular($query)     {         return $query->where('votes', '>', 100);     }      public function scopeWomen($query)     {         return $query->whereGender('W');     } }

用法:

$users = User::popular()->women()->orderBy('created_at')->get();

有時您可能希望定義一個接受參數的 scope。Dynamic scopes 接受查詢參數:

class User extends Model {     public function scopeOfType($query, $type)     {         return $query->whereType($type);     } }

用法:

$users = User::ofType('member')->get();

來源:?laravel.com

Q13:Laravel中的路由命名是什么?

Topic:?Laravel
Difficulty: ???

路由命名使得在生成重定向或者 URL 的時候更加方便地引用路由。您可以通過將 name 方法加到路由定義上來指定命名路由:

Route::get('user/profile', function () {     // })->name('profile');

您可以為控制器操作指定路由名稱:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

為路由分配名稱后,您可以在生成 URL 或重定向時,通過全局路由功能使用路由名稱:

// Generating URLs... $url = route('profile');  // Generating Redirects... return redirect()->route('profile');

來源:?laravelinterviewquestions.com

Q14:Laravel中的閉包是什么?

主題:Laravel
難度:???

閉包是一個匿名函數。閉包通常用作回調方法,并且可以用作函數中的參數

function handle(Closure $closure) {     $closure('Hello World!'); }  handle(function($value){     echo $value; });

來源:?stackoverflow.com

Q15:列出 Laravel 中查詢構建器提供的一些聚合方法?

主題:?Laravel難度: ???

聚合函數是一種功能,能夠將多行的值組合在一起,作為某些條件下的輸入,以形成具有更重要含義或度量值(例如集合,包或列表)的單個值。

以下是 Laravel 查詢構建器提供的一些聚合方法的列表:

  • count()
$products = DB::table(‘products’)->count();
  • max()
    $price = DB::table(‘orders’)->max(‘price’);
  • min()
    $price = DB::table(‘orders’)->min(‘price’);
  • avg()
    *$price = DB::table(‘orders’)->avg(‘price’);
  • sum()
    $price = DB::table(‘orders’)->sum(‘price’);

來源:?laravelinterviewquestions.com

Q16:什么是 Laravel 中的反向路由?

主題:Laravel
難度:???

在 Laravel 中,反向路由會根據路由聲明生成 URL。反向路由使您的應用程序更加靈活。例如,下面的路由聲明告訴 Laravel 當請求的 URI 為 “login” 時在 users 控制器中執行 “login” 操作。

http://mysite.com/login

Route::get(‘login’, ‘users@login’);

使用反向路由,我們可以創建到它的鏈接并傳遞我們定義的任何參數。如果未提供可選參數,則會從生成的鏈接中刪除。

{{ HTML::link_to_action('users@login') }}

它將在視圖中創建類似 http://mysite.com/login 的鏈接。

來源:?stackoverflow.com

Q17: :讓我們為 PHP 創建枚舉,提供一些代碼示例。

主題:?PHP
難度: ???

如果我們的代碼需要對枚舉常量和值進行更多驗證,該怎么辦?


根據使用情況,我通常會使用類似以下的簡單內容:

abstract class DaysOfWeek {     const Sunday = 0;     const Monday = 1;     // etc. }  $today = DaysOfWeek::Sunday;

這是一個擴展的示例,可以更好地服務于更廣泛的案例:

abstract class BasicEnum {     private static $constCacheArray = NULL;      private static function getConstants() {         if (self::$constCacheArray == NULL) {             self::$constCacheArray = [];         }         $calledClass = get_called_class();         if (!array_key_exists($calledClass, self::$constCacheArray)) {             $reflect = new ReflectionClass($calledClass);             self::$constCacheArray[$calledClass] = $reflect - > getConstants();         }         return self::$constCacheArray[$calledClass];     }      public static function isValidName($name, $strict = false) {         $constants = self::getConstants();          if ($strict) {             return array_key_exists($name, $constants);         }          $keys = array_map('strtolower', array_keys($constants));         return in_array(strtolower($name), $keys);     }      public static function isValidValue($value, $strict = true) {         $values = array_values(self::getConstants());         return in_array($value, $values, $strict);     } }

我們可以將其用作:

abstract class DaysOfWeek extends BasicEnum {     const Sunday = 0;     const Monday = 1;     const Tuesday = 2;     const Wednesday = 3;     const Thursday = 4;     const Friday = 5;     const Saturday = 6; }  DaysOfWeek::isValidName('Humpday');                  // false DaysOfWeek::isValidName('Monday');                   // true DaysOfWeek::isValidName('monday');                   // true DaysOfWeek::isValidName('monday', $strict = true);   // false DaysOfWeek::isValidName(0);                          // false  DaysOfWeek::isValidValue(0);                         // true DaysOfWeek::isValidValue(5);                         // true DaysOfWeek::isValidValue(7);                         // false DaysOfWeek::isValidValue('Friday');                  // false

來源:?stackoverflow.com

Q18:什么是PHP自動加載類?

主題:?PHP
難度: ???

使用自動加載器,PHP 允許在由于錯誤而失敗之前最后一次加載類或接口。

PHP中的 spl_autoload_register() 函數可以注冊任意數量的自動加載器,即使未定義類和接口也可以自動加載。

spl_autoload_register(function ($classname) {     include  $classname . '.php'; }); $object  = new Class1(); $object2 = new Class2();

在上面的示例中,我們不需要包含 Class1.php 和 Class2.php。spl_autoload_register() 函數將自動加載 Class1.php 和 Class2.php。

來源:?github.com/Bootsity

Q19:PHP是否支持方法重載?

主題:PHP
難度:???

方法重載是使用具有不同簽名的相同方法名稱的現象。PHP 中函數簽名僅基于它們的名稱,并且不包含參數列表,因此不能有兩個具有相同名稱的函數,所以 PHP 不支持方法重載。

但是,您可以聲明一個可變函數,它接受可變數量的參數。您可以使用 func_num_args() 和 func_get_arg() 來傳遞參數并正常使用它們。

function myFunc() {     for ($i = 0; $i < func_num_args(); $i++) {         printf("Argument %d: %sn", $i, func_get_arg($i));     } }  /* Argument 0: a Argument 1: 2 Argument 2: 3.5 */ myFunc('a', 2, 3.5);

來源:?github.com/Bootsity

Q20:Laravel 中為什么需要 Traits?

主題:?Laravel難度: ????

Traits?已被添加到 PHP 中,原因很簡單s:PHP 不支持多重繼承。簡而言之,一個類不能一次性擴展至多個類。當你需要在其他類也使用的兩個不同類中聲明的功能時,這變得很費力,結果是你必須重復執行代碼才能完成工作,而不會糾纏自己。

引入 Traits,它能使我們聲明一種包含多個可復用方法的類。更好的是,它們的方法可以直接注入到你使用的任何類中,并且你可以在同一類中使用多個 Trait。讓我們看一個簡單的 Hello World 示例。

trait SayHello {     private function hello()     {         return "Hello ";     }      private function world()     {         return "World";     } }  trait Talk {     private function speak()     {         echo $this->hello() . $this->world();     } }  class HelloWorld {     use SayHello;     use Talk;      public function __construct()     {         $this->speak();     } }  $message = new HelloWorld(); // returns "Hello World";

來源:?conetix.com.au

Q21:PHP 中的 Autoloader 是什么?

主題:?Laravel難度: ????

自動加載器定義了自動在代碼中包含 PHP 類的方法,而不必使用諸如 require 和 include 之類的語句。

  • PSR-4?將支持更簡單的文件夾結構,但是將使我們僅通過查看完全限定的名稱就無法知道類的確切路徑。
  • PSR-0?在硬盤驅動器上比較混亂,但是支持戀舊的開發人員(類名下劃線用戶),并幫助我們通過以下方式辨別類的位置:看它的名字。

來源:?sitepoint.com

Q22:在 PHP 中 yield 是什么意思?

主題:?PHP
難度: ????

解釋此代碼以及 yield 的作用:

function a($items) {     foreach ($items as $item) {         yield $item + 1;     } }

yield 關鍵字從生成器函數返回數據。生成器函數實際上是編寫 Iterator 的更緊湊和有效的方式。它允許您定義一個函數,該函數將在您遍歷該函數時計算并返回值。

因此,問題中的函數與以下內容的函數幾乎相同:

function b($items) {     $result = [];     foreach ($items as $item) {         $result[] = $item + 1;     }     return $result; }

只有一個區別,a() 返回一個 generator,而 b() 只是一個簡單的 數組。而且兩者都可以被迭代。

函數的生成器版本未分配完整的數組,因此對內存的需求較少。生成器可用于解決內存限制。由于生成器僅按需計算其 yielded 值,因此它們用于代替計算成本昂貴或無法一次性計算的序列很有用。

來源:?stackoverflow.com

Q23:$$$ 在 PHP 中是什么意思?

主題:?PHP
難度: ?????

類似 $$variable 的語法稱為可變變量。

讓我們嘗試 $$$:

$real_variable = 'test'; $name = 'real_variable'; // variable variable for real variable $name_of_name = 'name'; // variable variable for variable variable  echo $name_of_name . '<br />'; echo $$name_of_name . '<br />'; echo $$$name_of_name . '<br />';

這是輸出:

name real_variable test

來源:?guru99.com

原文鏈接:https://learnku.com/laravel/t/41264

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享