Rumah  >  Soal Jawab  >  teks badan

Tingkatkan akses fungsi kepada pembolehubah luaran

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粉165522886P粉165522886390 hari yang lalu454

membalas semua(2)saya akan balas

  • P粉645569197

    P粉6455691972023-10-17 13:51:02

    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;

    balas
    0
  • P粉734486718

    P粉7344867182023-10-17 13:39:45

    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< PHP 手册的 /a>, terutamanya subseksyen berikut:

    balas
    0
  • Batalbalas