Maison  >  Article  >  cadre php  >  Ces 23 questions d'entretien avec Laravel que vous devriez connaître !

Ces 23 questions d'entretien avec Laravel que vous devriez connaître !

藏色散人
藏色散人avant
2021-04-16 09:32:163684parcourir

Ci-dessous, la colonne du didacticiel laravel vous présentera 23 questions d'entretien Laravel que vous devriez connaître. J'espère que cela sera utile aux amis dans le besoin !

Explorez les 20 principales questions d'entretien Laravel que vous devriez connaître avant votre prochain entretien technique.

Q1 : Qu'est-ce que Laravel ?

Thème : Laravel
Difficulté : ⭐

Laravel est un framework web PHP gratuit et open source créé par Taylor Otwell, conçu pour développer des applications Web suivant le modèle architectural Model-View-Controller (MVC).

Source : codingcompiler.com

Q2 : Quels sont les avantages de Laravel par rapport aux autres frameworks Php ?

Thème : Laravel
Difficulté : ⭐
  • Le processus de configuration et de personnalisation est simple et rapide par rapport aux autres frameworks.
  • Système d'authentification intégré
  • Prend en charge plusieurs systèmes de fichiers
  • Packages préinstallés tels que Laravel Socialite, Laravel Cashier, Laravel Elixir, Passport, Laravel Scout
  • ORM éloquent (Object Relational Mapping) implémenté par PHP active record
  • Outil de ligne de commande intégré "Artisan" pour créer un cadre de code, une structure de base de données et construire sa migration

Source :mytectra.com

Q3 : Expliquer la migration dans Laravel

Sujet : Laravel
Difficulté : ⭐⭐

Migrations Laravel Semblable au contrôle de version de base de données, permettant aux équipes de modifier et de partager facilement le schéma de base de données de l'application. Les migrations sont souvent utilisées conjointement avec le générateur de schéma de Laravel pour créer facilement le schéma de base de données de votre application.

Source : laravelinterviewquestions.com

Q4 : A quoi sert le motif de façade ?

Thème : Laravel
Difficulté : ⭐⭐

Les façades fournissent une interface Statique . Les façades Laravel servent de proxys statiques pour les classes de base dans les conteneurs de services, offrant les avantages d'une syntaxe concise et expressive tout en conservant une testabilité et une flexibilité plus élevées que les méthodes statiques traditionnelles.

Toutes les façades Laravel sont définies dans l'espace de noms IlluminateSupportFacades.
Vue :

use Illuminate\Support\Facades\Cache;

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

Source : laravel.com

Q5 : Qu'est-ce qu'un conteneur de service ?

Thème : Laravel
Difficulté : ⭐⭐

Laravel Conteneur de services est utilisé pour gérer les dépendances de classe et effectuer un outil d'injection de dépendances.

Source : laravel.com

Q6 : Que sont les modèles éloquents ?

Thème : Laravel
Difficulté : ⭐⭐

L'ORM Eloquent fourni avec Laravel fournit une implémentation ActiveRecord belle et simple pour travailler avec des bases de données. Chaque table de base de données a un Modèle correspondant pour interagir avec cette table. Les modèles vous permettent d'interroger des données dans une table et d'insérer de nouveaux enregistrements dans la table.

Source : laravel.com

Q7 : Qu'est-ce qu'un événement Laravel ?

Thème : Laravel
Difficulté : ⭐⭐

Les événements Laravel fournissent une implémentation simple de Modèle d'observateur qui permet de s'abonner et d'écouter des événements dans le application. Un événement est une occurrence ou une chose qu'un programme détecte et gère.

Voici quelques exemples d'événements dans Laravel :

  • Inscription d'un nouvel utilisateur
  • Publier un nouveau commentaire
  • Connexion/déconnexion de l'utilisateur
  • Nouveaux produits ajoutés.

Source : mytectra.com

Q8 : Que savez-vous du générateur de requêtes dans Laravel ?

Thème : Laravel
Difficulté : ⭐⭐⭐

Le générateur de requêtes de base de données de Laravel fournit une interface pratique et fluide pour créer et exécuter des requêtes de base de données. Il peut être utilisé pour effectuer la plupart des opérations de base de données au sein d'une application et fonctionne sur tous les systèmes de bases de données pris en charge.

Le générateur de requêtes Laravel utilise la liaison de paramètres PDO pour protéger les applications contre les attaques par injection SQL. Il n'est pas nécessaire d'effacer la chaîne transmise en tant que liaison.

Quelques fonctionnalités du générateur de requêtes :

  • Chunking
  • Agrégation
  • Sélections
  • Méthodes natives
  • Rejoint
  • Unions
  • Déclaration Where
  • Ordre, regroupement, limite et compensation

Source : laravel .com

Q9 : Comment générer de la migration ?

Thème : Laravel
Difficulté : ⭐⭐⭐

La migration est comme le contrôle de version de votre base de données afin que votre équipe puisse facilement modifier et partagez le schéma de base de données de votre application. Les migrations sont souvent utilisées conjointement avec le générateur de schéma de Laravel pour créer facilement le schéma de base de données de votre application.

要创建迁移,使用 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: %s\n", $i, func_get_arg($i));
    }
}

/*
Argument 0: a
Argument 1: 2
Argument 2: 3.5
*/
myFunc(&#39;a&#39;, 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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer