2017-03-10 17 views
0

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), 
    ]; 
}); 
+3

Whit staticでは、最初にパスワードを作成した後、ループでevetimeを使用することを定義します。したがって、すべての反復で、bcryptは呼び出されません。 – zgabievi

答えて

1

bcrypt()パスワードのハッシュアルゴリズムとしての利点の一部であり、高価な呼び出しです。

生成される偽のパスワードは「シークレット」にハードコードされているため、毎回パスワードをbcrypt()にする必要はありません。 static変数を使用することで、パスワードを一度だけbcrypt()に設定し、同じ要求内で工場へのすべての呼び出しで同じハッシュ値を使用することができます。

たとえば、100人のユーザーが必要なテストを設定していたとします。

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

このコードでは、工場閉鎖を100回呼びます。静的な$password変数がないと、bcrypt()は100回実行され、数秒かかることがあります。静的変数の場合、bcrypt()は1回だけ実行され、その結果は100人のユーザーすべてに使用され、テストのスピードが大幅に向上します。

関連する問題