2017-03-10 4 views
0

In der Dokumentation zu Laravel 5.4 gibt es eine example of a factory, die eine statische Variable $password enthält. Was ist der Zweck dieser Variablen?Was ist der Zweck dieser statischen Variable?

$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

Mit statisch definieren Sie, dass nach der ersten Erstellung des Passwortes Sie es evetime in Schleife verwenden. In jeder Iteration wird also bcrypt nicht aufgerufen. – zgabievi

Antwort

1

bcrypt() ist ein teurer Anruf, der einen Teil seines Vorteils als Kennwort-Hashing-Algorithmus ist.

Da das gefälschte Kennwort, das generiert wird, auf "geheim" fest codiert ist, muss das Kennwort nicht jedes Mal bcrypt() eingegeben werden. Unter Verwendung einer static Variablen können wir das Kennwort bcrypt() einmal verwenden und dann denselben Hashwert bei jedem folgenden Aufruf der Factory (innerhalb der gleichen Anforderung) verwenden.

Stellen Sie sich zum Beispiel vor, Sie haben einen Test eingerichtet, der 100 Benutzer benötigt.

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

Dieser Code wird die Fabrik Schließung 100 Mal aufrufen. Ohne die statische $password Variable würde bcrypt() 100 mal laufen, was ein paar Sekunden dauern könnte. Mit der statischen Variable bcrypt() wird jetzt nur noch einmal ausgeführt, und das Ergebnis wird für alle 100 Benutzer verwendet, was die Geschwindigkeit Ihres Tests stark erhöht.

Verwandte Themen