Dışında değişkene benim işlevi erişimi verilmesi

3 Cevap php

Ben dışında bir dizi var:

$myArr = array();

Ben bunun için değerler ekleyebilirsiniz böylece bunun dışında dizi benim işlevi erişim vermek istiyorum

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

Nasıl değişken işlevini doğru kapsam belirleme veriyorsunuz?

3 Cevap

Bir fonksiyon içerisinde olduğunda, varsayılan olarak, siz dış değişkenlere erişimi yok.


If you want your function to have access to an outer variable, you have to declare it as global, inside the function :

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

Daha fazla bilgi almak için, Variable scope bakın.

Bu, sizin işlevi artık independant değildir: Ama using global variables is not a good practice unutmayın.


A better idea would be to make your function return the result :

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;
}

Ve bu gibi işlevi çağırır:

$result = someFunction();


Your function could also take parameters, and even work on a parameter passed by reference :

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

Sonra, bu gibi işlevi çağırır:

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

Bu grubu:

  • Sizin fonksiyonu parametre olarak harici diziyi aldı
  • Bu referans ile iletilen Ve, bunu değiştirebilirsiniz.
  • Ve küresel bir değişken kullanarak daha iyi bir uygulamadır: işlev herhangi bir dış kod birimi, bağımsızdır.


For more informations about that, you should read the
Functions section of the PHP manual, and,, especially, the following sub-sections :

Tek ve global değişkenleri kullanarak olur hedefe ulaşma muhtemelen çok iyi bir yoldur.

You could achieve that by adding global $myArr; to the beginning of your function. However note that using global variables is in most cases a bad idea and probably avoidable.

Çok daha iyi bir yolu işlevine argüman olarak diziyi geçen olurdu:

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

$myArr = someFunction($myArr);
Global $myArr;
$myArr = array();

function someFuntion(){
    global $myArr;

    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Bazı olumsuz yanları vardır, genel olarak insanlar uzakta globalleri gelen sopa, önlem.

Bunu deneyebilirsiniz

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

İşte bu yüzden Globals dayanarak değil yapar.