这个静态变量的目的是什么?

时间:2017-03-10 16:32:41

标签: database laravel

在Laravel 5.4文档中,有一个example of a factory,其中包含一个静态变量$password。这个变量的目的是什么?

$factory->define(App\User::class, function (Faker\Generator $faker) {
    static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

1 个答案:

答案 0 :(得分:1)

bcrypt()是一项昂贵的电话,它是密码散列算法的一部分。

由于生成的假密码被硬编码为“secret”,因此每次都不需要bcrypt()密码。通过使用static变量,我们可以bcrypt()密码一次,然后在每次后续工厂调用中(在同一请求中)使用相同的哈希值。

因此,例如,假设您正在设置需要100个用户的测试。

$users = factory(User::class, 100)->create();

该代码将调用工厂关闭100次。如果没有静态$password变量,bcrypt()将运行100次,这可能需要几秒钟。使用静态变量,bcrypt()现在只运行一次,结果将用于所有100个用户,这大大提高了测试的速度。