PHP sınıf işlevi bir dizi değişiklik olmayacak

2 Cevap php

PHP ve genel programlamaya yeni duyuyorum. Benim sınıfı yöntemlerinin sınıfının özellikleridir dizilerle çalışmak için görünmektedir olamaz dışında, ince olmuştur sınıfları oluşturmak için bana gerektirmiştir PHP ile bir kaç şey üzerinde çalışıyoruz. Ne olursa olsun proje çalışması için görünmüyor çünkü, oldukça temelden yanlış bir şey yapıyor olması gerekir.

Burada ben sadece (ben oldukça tür uzun ve karmaşıktır benim gerçek projesinin kod daha kısa ve basit bir örnek göndermek için kolay olacağını düşündüm) yazdı bir örnektir.

class Test {
    public $testArray;
    public $testInt;

    public function __construct() {
        $this->testArray = array();
        for ($i=1; $i<=20; $i++) {
            $this->testArray[] = array(1, 2);
        }
        $this->testInt = 4;
    }

    public function testf() {
        $this->testInt += 1;
        foreach ($this->testArray as $n) {
            $n[] = 3;
        }
    }
}

Ben ne oluyor bir baskı olsun ki ben sonunda bazı kod eklerseniz:

$obj = new Test;

echo 'Before function call:';
echo '<br />testArray:<br />';
foreach ($obj->testArray as $n) {
    print_r($n);
    echo '<br />';
}
echo '<br />testInt: ';
echo $obj->testInt;
echo '<br />';
echo '<br />';
echo '<br />';

$obj->testf();

echo 'After function call:';
echo '<br />testArray:<br />';
foreach ($obj->testArray as $n) {
    print_r($n);
    echo '<br />';
}
echo '<br />testInt: ';
echo $obj->testInt;
echo '<br />';

Sonra ne görerek sonunda fonksiyonundan sonra testInt değişken değişiklikleri diyoruz, ama testArray olmamasıdır.

Bu herhangi yeterince açık değilse bana bildirin lütfen. Bu bir süre için beni deli etti. Benim sorun bakmak için zaman ayırdığınız için şimdiden teşekkür ederiz.

2 Cevap

Bunu ne zaman:

    foreach ($this->testArray as $n) {
        $n[] = 3;
    }

Sen TestArray değerlerini değiştirerek değil. Bunlardan kopyaları üzerinde çalışıyoruz. Eğer başka bir değişkene PHP bir değer atamak her zaman, değerin bir kopyasını yapıyoruz. (Nesneler bu tür bir istisna vardır, ama burada alakalı değil.)

Orijinali değiştirmek istiyorsanız, bu gibi kendi değişken ismiyle başvurmak gerekir:

    foreach ($this->testArray as $index => $value) {
        $this->testArray[$index][] = 3;
    }

Sen foreach döngüsü için küçük bir şey eklemek gerekir:

  foreach ($this->testArray as &$n) {
        $n[] = 3;
    }

İşte bunu yapmak gerekir. & $ N araçlar yerine kopyalamak daha dizi öğeye. Muhtemelen de bunu üzerine yazmak istiyorsanız $ n [] sadece $ n değiştirmek istiyorum.