23 個你應(yīng)該知道的 Laravel 面試問題

Laravel

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

討論請前往專業(yè)的 Laravel 開發(fā)者論壇:https://learnku.com/Laravel

探索下一次技術(shù)面試之前應(yīng)該了解的前20個 Laravel 面試問題搜变。

Q1:什么是Laravel砾脑?

主題: Laravel
難度: ?

Laravel 是一個免費的開放源代碼 PHP Web 框架,由 Taylor Otwell 創(chuàng)建八千,旨在遵循模型-視圖-控制器(MVC)架構(gòu)模式開發(fā) Web 應(yīng)用程序碍舍。

?? 來源: codingcompiler.com

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

主題: Laravel
難度: ?

  • 與其他框架相比鸭津,設(shè)置和自定義過程既簡單又快速眼耀。
  • 內(nèi)置認證系統(tǒng)
  • 支持多個文件系統(tǒng)
  • 預(yù)裝軟件包蚯舱,例如 Laravel Socialite改化,Laravel cashier,Laravel elixir枉昏,Passport陈肛,Laravel Scout
  • PHP active record 實現(xiàn)的 Eloquent ORM (對象關(guān)系映射)
  • 內(nèi)置命令行工具 “Artisan”,用于創(chuàng)建代碼框架兄裂,數(shù)據(jù)庫結(jié)構(gòu)并構(gòu)建其遷移

?? 來源: mytectra.com

Q3:解釋 Laravel 中的遷移

主題: Laravel
難度: ??

Laravel Migrations 類似于數(shù)據(jù)庫的版本控制句旱,使團隊可以輕松地修改和共享應(yīng)用程序的數(shù)據(jù)庫架構(gòu)阳藻。遷移通常與 Laravel 的架構(gòu)生成器搭配使用,以輕松構(gòu)建應(yīng)用程序的數(shù)據(jù)庫架構(gòu)谈撒。

?? 來源: laravelinterviewquestions.com

Q4:Facade Pattern 有什么用腥泥?

主題: Laravel
難度: ??

Facades 為應(yīng)用程序的服務(wù)容器中可用的類提供了一個 靜態(tài) 接口。Laravel facades 作為服務(wù)容器中基礎(chǔ)類的靜態(tài)代理啃匿,提供了簡潔蛔外、表達性強的語法的優(yōu)勢,同時保持了比傳統(tǒng)靜態(tài)方法更高的可測試性和靈活性溯乒。

所有的 Laravel facades 都是在 Illuminate\Support\Facades 命名空間中定義夹厌。
查看:

use Illuminate\Support\Facades\Cache;

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

?? 來源: laravel.com

Q5:什么是服務(wù)容器?

主題: Laravel
難度: ??

Laravel 服務(wù)容器 是用于管理類依賴性和執(zhí)行依賴性注入的工具裆悄。

?? 來源: laravel.com

Q6:什么是 Eloquent Models矛纹?

主題: Laravel
難度: ??

Laravel 附帶的 Eloquent ORM 提供了一個漂亮、簡單的 ActiveRecord 實現(xiàn)光稼,用于處理數(shù)據(jù)庫或南。每個數(shù)據(jù)庫表都有一個對應(yīng)的模型,用于與該表進行交互钟哥。通過模型迎献,您可以查詢表中的數(shù)據(jù),以及將新記錄插入表中腻贰。

?? 來源: laravel.com

Q7:什么是Laravel事件?

主題: Laravel
難度: ??

Laravel 事件提供了一個簡單的觀察者模式實現(xiàn)扒秸,允許訂閱和監(jiān)聽?wèi)?yīng)用程序中的事件播演。事件是程序檢測并處理的事故或事情。

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

  • 新用戶注冊
  • 發(fā)布新評論
  • 用戶登錄/注銷
  • 添加了新產(chǎn)品伴奥。

?? 來源: mytectra.com

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

主題: Laravel
難度: ???

Laravel 的數(shù)據(jù)庫查詢構(gòu)建器為創(chuàng)建和運行數(shù)據(jù)庫查詢提供了方便,流暢的接口拾徙。它可以用于在應(yīng)用程序中執(zhí)行大多數(shù)數(shù)據(jù)庫操作洲炊,并且可以在所有支持的數(shù)據(jù)庫系統(tǒng)上工作。

Laravel 查詢構(gòu)建器使用 PDO 參數(shù)綁定來保護應(yīng)用程序免受 SQL 注入攻擊尼啡。無需清除作為綁定傳遞的字符串暂衡。

查詢生成器的一些功能:

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

?? Source: laravel.com

Q9:如何生成遷移?

主題: Laravel
難度: ???

遷移就像您數(shù)據(jù)庫的版本控制一樣书聚,使您的團隊可以輕松地修改和共享應(yīng)用程序的數(shù)據(jù)庫架構(gòu)唧领。遷移通常與 Laravel 的架構(gòu)構(gòu)建器搭配使用藻雌,以輕松構(gòu)建應(yīng)用程序的數(shù)據(jù)庫架構(gòu)。

要創(chuàng)建遷移斩个,使用 make:migration Artisan 命令:

php artisan make:migration create_users_table

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

?? 來源: laravel.com

Q10:如何 mock 一個靜態(tài) facade 方法歉摧?

主題:Laravel
難度:???

Facades 為應(yīng)用程序的服務(wù)容器中可用的類提供“靜態(tài)”接口。與傳統(tǒng)的靜態(tài)方法調(diào)用不同腔呜,F(xiàn)acades 是可被 mock 的叁温。我們可以使用 shouldReceive 方法 mock 對靜態(tài)外觀方法的調(diào)用,該方法將返回 Mockery mock 的實例核畴。

// 實際代碼
$value = Cache::get('key');

// 測試
Cache::shouldReceive('get')
                    ->once()
                    ->with('key')
                    ->andReturn('value');

?? 來源: laravel.com

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

主題: Laravel
難度: ???

當(dāng)訪問 Eloquent 關(guān)系作為屬性時谤草,關(guān)系數(shù)據(jù)是 “Lazy Loaded” 的跟束。這意味著直到您首次訪問該屬性,關(guān)系數(shù)據(jù)才被實際加載丑孩。但是冀宴,Eloquent 可以在查詢父模型時 “Eager Load” 關(guān)系。

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

?? 來源: FullStack.Cafe

Q12:本地作用域有何用仗岖?

主題: Laravel
難度: ???

Scopes 允許您輕松地在模型中復(fù)用查詢邏輯逃延。要定義 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();

有時您可能希望定義一個接受參數(shù)的 scope轧拄。Dynamic scopes 接受查詢參數(shù):

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
難度:???

閉包是一個匿名函數(shù)俐末。閉包通常用作回調(diào)方法料按,并且可以用作函數(shù)中的參數(shù)

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

handle(function($value){
    echo $value;
});

?? 來源: stackoverflow.com

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

主題: Laravel
難度: ???

聚合函數(shù)是一種功能鹅搪,能夠?qū)⒍嘈械闹到M合在一起站绪,作為某些條件下的輸入,以形成具有更重要含義或度量值(例如集合丽柿,包或列表)的單個值恢准。

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

  • 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 中,反向路由會根據(jù)路由聲明生成 URL馁筐。反向路由使您的應(yīng)用程序更加靈活涂召。例如,下面的路由聲明告訴 Laravel 當(dāng)請求的 URI 為 “l(fā)ogin” 時在 users 控制器中執(zhí)行 “l(fā)ogin” 操作敏沉。

http://mysite.com/login

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

使用反向路由果正,我們可以創(chuàng)建到它的鏈接并傳遞我們定義的任何參數(shù)。如果未提供可選參數(shù)盟迟,則會從生成的鏈接中刪除秋泳。

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

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

?? 來源: stackoverflow.com

Q17: :讓我們?yōu)?PHP 創(chuàng)建枚舉攒菠,提供一些代碼示例迫皱。

主題: PHP
難度: ???

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


根據(jù)使用情況卓起,我通常會使用類似以下的簡單內(nèi)容:

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

$today = DaysOfWeek::Sunday;

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

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()函數(shù)可以注冊任意數(shù)量的自動加載器啤它,即使未定義類和接口也可以自動加載奕筐。

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

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

?? 來源: github.com/Bootsity

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

主題:PHP
難度:???

方法重載是使用具有不同簽名的相同方法名稱的現(xiàn)象杀餐。PHP 中函數(shù)簽名僅基于它們的名稱柑晒,并且不包含參數(shù)列表赵颅,因此不能有兩個具有相同名稱的函數(shù)慈格,所以 PHP 不支持方法重載芬首。

但是畴博,您可以聲明一個可變函數(shù)瓢捉,它接受可變數(shù)量的參數(shù)频丘。您可以使用 func_num_args()func_get_arg() 來傳遞參數(shù)并正常使用它們。

function myFunc() {
    for ($i = 0; $i < func_num_args(); $i++) {
        printf("Argument %d: %s\n", $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 不支持多重繼承。簡而言之某弦,一個類不能一次性擴展至多個類桐汤。當(dāng)你需要在其他類也使用的兩個不同類中聲明的功能時而克,這變得很費力,結(jié)果是你必須重復(fù)執(zhí)行代碼才能完成工作怔毛,而不會糾纏自己员萍。

引入 Traits,它能使我們聲明一種包含多個可復(fù)用方法的類拣度。更好的是碎绎,它們的方法可以直接注入到你使用的任何類中,并且你可以在同一類中使用多個 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 將支持更簡單的文件夾結(jié)構(gòu),但是將使我們僅通過查看完全限定的名稱就無法知道類的確切路徑宿接。
  • PSR-0 在硬盤驅(qū)動器上比較混亂赘淮,但是支持戀舊的開發(fā)人員(類名下劃線用戶),并幫助我們通過以下方式辨別類的位置:看它的名字睦霎。

?? 來源: sitepoint.com

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

主題: PHP
難度: ????

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

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


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

因此碑幅,問題中的函數(shù)與以下內(nèi)容的函數(shù)幾乎相同:

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

只有一個區(qū)別戴陡,a() 返回一個 generator,而 b() 只是一個簡單的 數(shù)組沟涨。而且兩者都可以被迭代恤批。

函數(shù)的生成器版本未分配完整的數(shù)組,因此對內(nèi)存的需求較少裹赴。生成器可用于解決內(nèi)存限制喜庞。由于生成器僅按需計算其 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

討論請前往專業(yè)的 Laravel 開發(fā)者論壇:https://learnku.com/Laravel

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睛竣,一起剝皮案震驚了整個濱河市晰房,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖殊者,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件与境,死亡現(xiàn)場離奇詭異,居然都是意外死亡幽污,警方通過查閱死者的電腦和手機嚷辅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來距误,“玉大人簸搞,你說我怎么就攤上這事∽继叮” “怎么了趁俊?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刑然。 經(jīng)常有香客問我寺擂,道長,這世上最難降的妖魔是什么泼掠? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任怔软,我火速辦了婚禮,結(jié)果婚禮上择镇,老公的妹妹穿的比我還像新娘挡逼。我一直安慰自己,他們只是感情好腻豌,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布家坎。 她就那樣靜靜地躺著,像睡著了一般吝梅。 火紅的嫁衣襯著肌膚如雪虱疏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天苏携,我揣著相機與錄音做瞪,去河邊找鬼。 笑死右冻,一個胖子當(dāng)著我的面吹牛穿扳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播国旷,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茫死!你這毒婦竟也來了跪但?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屡久,沒想到半個月后忆首,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡被环,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年糙及,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筛欢。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡浸锨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出版姑,到底是詐尸還是另有隱情柱搜,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布剥险,位于F島的核電站聪蘸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏表制。R本人自食惡果不足惜健爬,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望么介。 院中可真熱鬧娜遵,春花似錦、人聲如沸夭拌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸽扁。三九已至蒜绽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桶现,已是汗流浹背躲雅。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骡和,地道東北人相赁。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像慰于,于是被迫代替她去往敵國和親钮科。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 過去做事情急婆赠,什么東西拿起來就用绵脯,不喜歡進行系統(tǒng)性的學(xué)習(xí),造成在使用過程中的錯誤和低效,現(xiàn)在感覺自己耐心多了蛆挫,用之...
    馬文Marvin閱讀 1,972評論 0 10
  • Laravel框架一:原理機制篇 Laravel作為在國內(nèi)國外都頗為流行的PHP框架赃承,風(fēng)格優(yōu)雅,其擁有自己的一些特...
    Mr_Z_Heng閱讀 3,667評論 0 13
  • 一悴侵、框架概述 課程概述 laravel 4天(之前TP框架還是很大的區(qū)別)(國外框架) 在線教育平臺 6天(lar...
    大大的世界小小的夢想_97ef閱讀 1,349評論 0 2
  • 一瞧剖、框架概述 課程概述 laravel 4天(之前TP框架還是很大的區(qū)別)(國外框架) 在線教育平臺 6天(lar...
    我愛開發(fā)閱讀 1,437評論 0 5
  • 河畔 柳葉招展 一抹風(fēng)煙橋邊 舉步尋覓 身影的盤桓月下 起舞蹁躚 銀光流轉(zhuǎn)灑滿了水袖 拂拭青天 時光 跳躍指尖 滑...
    夢飲千樽月閱讀 533評論 0 49