PHP yine de var mı ben bir işlevin dönüş değeri bir dizi operatörünü taklit edebilir [yinelenen]

5 Cevap php

Possible Duplicate:
Any way to access array directly after method call?

C # ve diğer dillerde, böyle bir şey yapabilirsiniz

$value = $obj->getArray()[0];

Ama PHP. Herhangi bir geçici çözümler veya Bunu her zaman yapmak mahkum ediyorum?

$array = $obj->getArray();
$value = $array[0];

5 Cevap

Hayır, siz (sadece ilk elemanı alır hangi) array_shift kullanmadan bunu yapamaz. Eğer üçüncü veya dördüncü erişmek istiyorsanız, büyük olasılıkla böyle bir işlevi yapmak isterdim:

function elemnt($array, $element)
{
    return $array[$element];
}
$value = element($obj->getArray(), 4);

O tam bir kopyası olarak da, bu soruya bakın: http://stackoverflow.com/questions/1182452/any-way-to-access-array-directly-after-method-call/1182461#1182461

Ben bunu bu şekilde yapmak mahkumdur düşünüyorum: (

Bunu yapabilirsiniz:

$res = array_pop(array_slice(somefunc(1), $i, 1));

Bu örnekte durum geçerlidir bir kerelik ya da arada bir şeydir, ve dönüş dizinin ilk elemanı almak ediyorsanız kullanabilirsiniz:

$value = array_shift($obj->getArray());

Bu yaygın bir ihtiyaç olduğunu ve sık sık, o yüzden gibi mevcut bir yardımcı işlev için düzenlemek istiyorum (sen array_pop() kullanabileceğiniz için, veya son) ilk dışındaki öğeleri almak için gerekirse:

function elementOf($array, $index = 0) {
    return $array[$index];
}
$value = elementOf($obj->getArray());
$otherValue = elementOf($obj->getArray(), 2);

Eh, belki bu php SPL, oldukça yararlı, size sizin için özel Dizisi yapabilirsiniz, size yardımcı olabilir:

<?php

class OArray extends ArrayObject{   
    public function __set($name, $val) {
        $this[$name] = $val;
    }
    public function __get($name) {
        return $this[$name];
    }
}

class O{

    function __construct(){
        $this->array = new OArray();
        $this->array[] = 1;
        $this->array[] = 2;
        $this->array[] = 3;
        $this->array[] = 4;
    }

    function getArray(){
        return $this->array;
    }

}
$o = new O();
var_dump( $o->getArray()->{1} );