您好,登錄后才能下訂單哦!
小編給大家分享一下Laravel面試題的相關(guān)知識點分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
探索下一次技術(shù)面試之前應(yīng)該了解的前20個 Laravel 面試問題。
主題: Laravel
難度: ?
Laravel 是一個免費的開放源代碼 PHP Web 框架,由 Taylor Otwell 創(chuàng)建,旨在遵循模型-視圖-控制器(MVC)架構(gòu)模式開發(fā) Web 應(yīng)用程序。
主題: Laravel
難度: ?
與其他框架相比,設(shè)置和自定義過程既簡單又快速。
內(nèi)置認(rèn)證系統(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)建其遷移
主題: Laravel
難度: ??
Laravel Migrations 類似于數(shù)據(jù)庫的版本控制,使團(tuán)隊可以輕松地修改和共享應(yīng)用程序的數(shù)據(jù)庫架構(gòu)。遷移通常與 Laravel 的架構(gòu)生成器搭配使用,以輕松構(gòu)建應(yīng)用程序的數(shù)據(jù)庫架構(gòu)。
主題: Laravel
難度: ??
Facades 為應(yīng)用程序的服務(wù)容器中可用的類提供了一個 靜態(tài) 接口。Laravel facades 作為服務(wù)容器中基礎(chǔ)類的靜態(tài)代理,提供了簡潔、表達(dá)性強的語法的優(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
主題: Laravel
難度: ??
Laravel 服務(wù)容器 是用于管理類依賴性和執(zhí)行依賴性注入的工具。
主題: Laravel
難度: ??
Laravel 附帶的 Eloquent ORM 提供了一個漂亮、簡單的 ActiveRecord 實現(xiàn),用于處理數(shù)據(jù)庫。每個數(shù)據(jù)庫表都有一個對應(yīng)的模型,用于與該表進(jìn)行交互。通過模型,您可以查詢表中的數(shù)據(jù),以及將新記錄插入表中。
來源: laravel.com
主題: Laravel
難度: ??
Laravel 事件提供了一個簡單的觀察者模式實現(xiàn),允許訂閱和監(jiān)聽?wèi)?yīng)用程序中的事件。事件是程序檢測并處理的事故或事情。
以下是 Laravel 中的一些事件示例:
新用戶注冊
發(fā)布新評論
用戶登錄/注銷
添加了新產(chǎn)品。
主題: 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ù)綁定來保護(hù)應(yīng)用程序免受 SQL 注入攻擊。無需清除作為綁定傳遞的字符串。
查詢生成器的一些功能:
分塊
聚合
Selects
原生方法
Joins
Unions
Where 語句
Ordering,Grouping,Limit,& Offset
主題: Laravel
難度: ???
遷移就像您數(shù)據(jù)庫的版本控制一樣,使您的團(tuán)隊可以輕松地修改和共享應(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
難度:???
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
難度: ???
當(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個查詢。
主題: 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();
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
主題:Laravel
難度:???
閉包是一個匿名函數(shù)。閉包通常用作回調(diào)方法,并且可以用作函數(shù)中的參數(shù)
function handle(Closure $closure) { $closure('Hello World!'); } handle(function($value){ echo $value; });
主題: 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’);
主題: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 的鏈接。
主題: PHP
難度: ???
如果我們的代碼需要對枚舉常量和值進(jìn)行更多驗證,該怎么辦?
根據(jù)使用情況,我通常會使用類似以下的簡單內(nèi)容:
abstract class DaysOfWeek { const Sunday = 0; const Monday = 1; // etc. } $today = DaysOfWeek::Sunday;
這是一個擴(kuò)展的示例,可以更好地服務(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
主題: 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。
主題: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
主題: Laravel
難度: ????
Traits 已被添加到 PHP 中,原因很簡單s:PHP 不支持多重繼承。簡而言之,一個類不能一次性擴(kuò)展至多個類。當(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";
主題: Laravel
難度: ????
自動加載器定義了自動在代碼中包含 PHP 類的方法,而不必使用諸如 require 和 include 之類的語句。
PSR-4 將支持更簡單的文件夾結(jié)構(gòu),但是將使我們僅通過查看完全限定的名稱就無法知道類的確切路徑。
PSR-0 在硬盤驅(qū)動器上比較混亂,但是支持戀舊的開發(fā)人員(類名下劃線用戶),并幫助我們通過以下方式辨別類的位置:看它的名字。
主題: 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 值,因此它們用于代替計算成本昂貴或無法一次性計算的序列很有用。
主題: 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
以上是“Laravel面試題的相關(guān)知識點分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。