Tingkatkan akses fungsi kepada pembolehubah luaran
P粉165522886
P粉165522886 2023-10-16 17:43:35
0
2
452

Saya mempunyai tatasusunan di luar:

$myArr = array();

Saya mahu fungsi saya mengakses tatasusunan di luarnya supaya ia boleh menambah nilai padanya

function someFuntion(){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Bagaimana untuk memberi pembolehubah skop yang betul untuk fungsi?

P粉165522886
P粉165522886

membalas semua(2)
P粉645569197

Anda boleh menggunakan fungsi tanpa nama:

$foo = 42;
$bar = function($x = 0) use ($foo) {
    return $x + $foo;
};
var_dump($bar(10)); // int(52)

Atau anda boleh menggunakan fungsi anak panah:

$bar = fn($x = 0) => $x + $foo;
P粉734486718

Secara lalai, apabila anda berada di dalam fungsi, anda tidak mempunyai akses kepada pembolehubah luaran.


Jika anda mahu sesuatu fungsi boleh mengakses pembolehubah luaran, anda mesti mengisytiharkannya sebagai pembolehubah global di dalam fungsi:

function someFuntion(){
    global $myArr;
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Untuk maklumat lanjut, lihat Skop boleh ubah .

Tetapi sila ambil perhatian bahawa menggunakan pembolehubah global bukanlah amalan yang baik: dengan cara ini fungsi anda tidak lagi bebas.


Idea yang lebih baik ialah mempunyai fungsi anda kembalikan hasilnya :

function someFuntion(){
    $myArr = array();       // At first, you have an empty array
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
    return $myArr;
}

dan panggil fungsi seperti ini:

$result = someFunction();


Fungsi anda juga boleh menerima hujah dan juga mengendalikan hujah yang diluluskan melalui rujukan :

function someFuntion(array & $myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
}

Kemudian, panggil fungsi seperti ini:

$myArr = array( ... );
someFunction($myArr);  // The function will receive $myArr, and modify it

Dengan ini:

  • Fungsi anda menerima tatasusunan luaran sebagai parameter
  • Dan ia boleh diubah suai kerana ia diluluskan melalui rujukan.
  • Ini lebih baik daripada menggunakan pembolehubah global: fungsi anda ialah satu unit, bebas daripada sebarang kod luaran.


Untuk maklumat lanjut, anda harus membaca bahagian functions, terutamanya subseksyen berikut:

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!