چرا مقادیر متغییر در توابع php ریست میشوند؟
https://lamtakam.com/qanda/3904/چرا-مقادیر-متغییر-در-توابع-php-ریست-میشوند؟ 2دوستان من یک کد دارم به زبان گو golang، اینه کدم:
package main
import "fmt"
func main() {
var myfunc = test()
for i := 0; i < 5; i++ {
fmt.Println(myfunc(i))
}
}
func test() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
خروجیش هم اینه:
0
1
3
6
10
حالا قصد دارم همین کد رو با زبان php بازنویسی کنم، و البته این کار رو هم انجام دادم، منتها خروجیش عوض میشه؛ یعنی مقدار متغییر sum
همیشه دوباره از 0 شروع میشه:
<?php
function test(){
$sum = 0;
return function ($i) use($sum) {
$sum += $i;
return $sum;
};
}
$myfunc = test();
for($i = 0; $i < 5; $i++){
echo $myfunc($i) . PHP_EOL;
}
همونطور که گفتم چون مقدار $sum
ادامه پیدا نمیکنه، خروجیش میشه:
0
1
2
3
4
کسی میدونه چطور میشه همون خروجی رو گرفت که توی زبان go میگیرم؟ یعنی میخوام یه جورایی متغییر ادامه دار بشه، شاید بشه گفت گلوبال global بشه. ممنون میشم راهنمایی کنید..