i bir dizi gibi stdclass kullanabilir?

6 Cevap php

Bu stdClass nesneler jenerik dizinlenmiş dizi gibi çalışması yapmak mümkün mü?

i.e. $array = Array ( [0] => 120 [1] => 382 [2] => 552 [3] => 595 [4] => 616 )

gibi inşa edilecek

$a = array();
$array[] = 120;
$array[] = 382;

vb

i bir nesne ile bunu ama eğer sadece kendisi yazar:

$obj = new stdClass;
$obj->a = 120;
$obj->a = 382;

i, i 'bir' her zaman değişebileceğini biliyoruz

üzgünüm bu aptal bir soru ama nedense beni topallıyor eğer!

Herhangi bir yardım için teşekkür ederiz :)

Dan

6 Cevap

Kısacası, hayır, her zaman kendi özellikleri isim olacak çünkü. ArrayAccess basit bir sınıf yazmanın sorun geçiyor aslında performans ve şeffaflık aşırı fedakarlık dışında bunu göstermek için hiçbir şey ile bir dizi yeniden ettik ya hiçbir mantıklı.

Sorunun bir dizi kullanarak daha basitçe sonsuz çözülemez bir nedeni var mı, yoksa bu sadece bir dilek-I-biliyordum soru?

EDIT: this question daha fazla bilgi için göz atın.

Hayır, yapamazsın. ([]) gibi PHP "ArrayAccess" denir, ve stdClass nesnede uygulanmadı dirseklerini kullanarak.

Bu might gibi bir şey istiyorsanız sizin gibi sesler

$foo = new stdClass();
$foo->items = array();
$foo->items[] = 'abc';
$foo->items[] = '123';
$foo->items[] = 'you and me';

Ayrıca ne olacağını görmek için bir stdClass olarak bir dizi döküm deneyebilirsiniz.

$foo = array();
$foo[] = 'abc';
$foo[] = '123';
$foo[] = 'you and me';
$foo = (object) $foo;
var_dump($foo);

Ben gerçekten kısa, yapmak ne demek göremiyorum

<?php
$obj->a = array();
$obj->a[] = 120;
$obj->a[] = 382;
// ...
?>

Sadece bir nesnenin üzerine bir alan "itme" olamaz. Sen zaten değerini almak için alanın adını bilmeniz gerekir, bu yüzden oldukça çok saçma.

Bir nesne bir dizi değil. Eğer sayısal endeksli öğeleri istiyorsanız, bir dizi kullanın.

İsterseniz adında elemanları bir nesne ya da bir ilişkisel dizi kullanabilirsiniz.

Array, bir dizin belirtme, yani PHP endeks olarak Array uzunluğunu kullanır, çünkü farklı bir davranış alıyoruz neden gelince, bu kadar. Nesne ile, (bu durumda 'a') adını belirtmeniz gerekir.

Eğer yapmak isteyebilirsiniz başka bir şey, bir dizi bir üyesi ile, bir nesne var ise:

$obj = new stdClass;
$obj->arr = array();
$obj->arr[] = 'foo';
$obj->arr[] = 'bar';

Ayrıca bir nesne için bir dizi çevirebilirsiniz unutmayın:

$obj = (object) array(
    'arr' => array(
        'foo',
        'bar'
    )
);

Sadece OOP uğruna, sınıfları kullanmayın. Eğer gerçekten bu işlevi uygulamak istiyorsanız, bu sınıfı kullanın:

class ArrayClass
{
    protected $storage = array();

    public function push($content) {
        $this->storage[] = $content;
        return $this;
    }

    public function get($index) {
        if (isset($this->storage[$index])) {
            return $this->storage[$index];
        } else {
            //throw an error or
            return false;
        }
    }
}

Tam olarak bu JavaScript alabilirsiniz.