modelfactory.php中的问题

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

请问老师,在modelfactory.php文件里的 这段代码中的 stataic $password;
有什么用的?为什么要申明为static?

static 關鍵字可以讓當前 function 記住該值,在之後執行時都會沿用之前的值

function increment() {
    static $num =  0; // 這裡只會在第一次被 call 時執行,所以只會做初始化值一次
    $num++; 
    echo $num;
}

increment(); // => 1
increment(); // => 2
increment(); // => 3
increment(); // => 4

放到 ModelFactory 來講的話,完整的 Code 應該是這樣:

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

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

$password 在第一次執行時是 NULL 的 ( 只有宣告沒賦值 ),會跑 $password = bcrypt('secret')
那因為 $password 都會被記住,之後就都會直接去使用 $password 而不會再跑一次 bcrypt('secret')

有點花式的用法,不過在效能上會有所提升。

JellyBool
修改的评论也不能少于六个字哦!
Tomoe
修改的评论也不能少于六个字哦!
liudong0763 回复 Tomoe
修改的评论也不能少于六个字哦!
JellyBool 回复 Tomoe
修改的评论也不能少于六个字哦!
Tomoe
修改的评论也不能少于六个字哦!