您好,欢迎访问一九零五行业门户网

这23个Laravel面试问题你是应该知道的!

下面由laravel教程栏目给大家介绍23 个你应该知道的 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 scoutphp active record 实现的 eloquent orm (对象关系映射)内置命令行工具 “artisan”,用于创建代码框架,数据库结构并构建其迁移来源: mytectra.com
q3:解释 laravel 中的迁移主题: laravel
难度: ⭐⭐laravel migrations 类似于数据库的版本控制,使团队可以轻松地修改和共享应用程序的数据库架构。迁移通常与 laravel 的架构生成器搭配使用,以轻松构建应用程序的数据库架构。
来源: laravelinterviewquestions.com
q4:facade pattern 有什么用?主题: laravel
难度: ⭐⭐facades 为应用程序的服务容器中可用的类提供了一个 静态 接口。laravel facades 作为服务容器中基础类的静态代理,提供了简洁、表达性强的语法的优势,同时保持了比传统静态方法更高的可测试性和灵活性。
所有的 laravel facades 都是在 illuminate\support\facades 命名空间中定义。
查看:
use illuminate\support\facades\cache;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原生方法joinsunionswhere 语句ordering,grouping,limit,& offsetsource: 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');                  // falsedaysofweek::isvalidname('monday');                   // truedaysofweek::isvalidname('monday');                   // truedaysofweek::isvalidname('monday', $strict = true);   // falsedaysofweek::isvalidname(0);                          // falsedaysofweek::isvalidvalue(0);                         // truedaysofweek::isvalidvalue(5);                         // truedaysofweek::isvalidvalue(7);                         // falsedaysofweek::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: %s\n", $i, func_get_arg($i)); }}/*argument 0: aargument 1: 2argument 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 variableecho $name_of_name . '<br />';echo $$name_of_name . '<br />';echo $$$name_of_name . '<br />';
这是输出:
namereal_variabletest
来源: guru99.com
原文链接:https://learnku.com/laravel/t/41264
以上就是这23个laravel面试问题你是应该知道的!的详细内容。
其它类似信息

推荐信息