2017-03-10 19 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

白衣靜態定義,首先創建密碼後,你將在循環evetime使用它。所以在每次迭代中,bcrypt都不會被調用。 – zgabievi

回答

1

bcrypt()是一種昂貴的呼叫,這是它的優點部分作爲密碼散列算法。

由於產生硬編碼到「祕密」的假密碼,沒有必要每次都bcrypt()密碼。通過使用static變量,我們可以bcrypt()密碼一次,然後使用相同的散列值在每個後續調用工廠(相同的請求內)。

因此,舉例來說,假設你建立一個測試,需要100個用戶。

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

該代碼將調用工廠關閉100次。如果沒有靜態變量$passwordbcrypt()將運行100次,這可能需要幾秒鐘。使用靜態變量,bcrypt()現在只運行一次,結果將用於所有100個用戶,這將大大提高測試的速度。

相關問題