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')
。
有點花式的用法,不過在效能上會有所提升。