Ne benim PHP dizi nesi var?

6 Cevap php
    $genreList;

    function directorGen($array)
    {
	    foreach($array as $value)
        {
		  $genreList[] = $value;	
	    }
    }

   //later..

   directorGen($title->genres());

Bu kod bir NULL dizi ile sonuçlanır. Ben echo $ değeri ile $ genreList [] = $ değerinin yerine beklendiği gibi her şey yazdırır. Herhangi bir fikir?

6 Cevap

$genreList global bir değişken ise, bir sorun var: bu kapsamla ilgili bir sorun. Kolayca ile tespit edilebilir:

$genreList = array();

function directorGen($array) {
    global $genreList;
    foreach($array as $value) {
        $genreList[] = $value;        
    }
}

Note: kesinlikle gerekli değil iken Ben de iyi bir uygulama olduğunu düşünüyorum, onu başlatıldı.

: directorGen() bir üye işlev ve $genreList ise bir veri üyesi daha sonra değiştirmek

function directorGen($array) {
    foreach($array as $value) {
        $this->genreList[] = $value;        
    }
}

Nerede $genreList tanımlanır? Bu sadece işlev çıktığı zaman kaybetmiş durumda bir fonksiyon yerel bir değişken olabilir. Bir sınıf düzeyi değişkeni varsa, bunun yerine $this->genreList kullanmayı unutmayın.

Edit

Benim hatam. Küresel bir değişken ise, PHP bulmak için sırayla fonksiyonunun üstüne bu eklemeniz gerekir:

global $genreList;

Bu kapsamla ilgili bir sorun. DirectorGen içindeki $ genreList () sadece directorGen içinde var (), örtük bu işlevin dışında sözü sırf küresel değil. Fonksiyonun üstündeki global $genreList kullanılarak deneyin.

Aşağıdakilerden birinin sorunu düzeltmek gerekir;

$genreList[] .= $value; // Appends each value to the array. 

array_push($genreList, $value);

Ayrıca benim hata, bu deyimi üzerinden işlevinden genreList dönen alınmalıdır:

return $genreList;

Bu global değişken kullanımını hem de bu değişiklikleri gibi onun değerini izleme sayısız sorunlar yaratabilir gibi küresel anahtar sözcüğünü kullanarak genel bir kod koku olarak kabul edilir.

function directorGen($array)
{
    $genreList = array();

    foreach($array as $value)
    {
        $genreList[] = $value;        
    }

    return $genreList;
}

/ / Daha sonra ..

directorGen ($ title-> türler ());

Her zaman dizi alacaksınız. Hatta boş. Ve is_array () fonksiyonu ile kontrol etmek gerekmez.

Bu ne yapmak istediğinizi muhtemelen:

class Test {
    //public, protected, private ...
    var $genreList = array();

    function directorGen(array $array) {
    	//remove string keys
    	$values = array_values($array);
    	$this->genreList = array_merge($this->genreList, $values);
    }
}

NB: sayaçlarını sıfırlar olacak. Bir değer unset ve daha sonra yeni değerler eklerseniz, anahtarlar sayısı at 0 düşük ve max reset olacak - 1.