Frage

ist es möglich, stdClass Objekte funktionieren wie ein allgemein indiziertes Array?

zu machen

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

würde wie konstruiert sein

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

etc.

aber wenn ich das mit einem Objekt es sich nur überschreibt:

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

Ich weiß, ich kann ändern 'a' jedes Mal,

Sorry, wenn dies eine dumme Frage, aber es ist stumping ich aus irgendeinem Grunde!

Jede mögliche Hilfe schätzen:)

Dan

War es hilfreich?

Lösung

Kurz gesagt, nein, weil Sie immer Ihre Eigenschaften nennen müssen. Wenn man durch die Mühe eine einfache Klasse mit Arrayaccess Schreiben macht keinen Sinn, entweder als Sie im Wesentlichen ein Array mit nichts neu erstellt habe es außer extremen Opfern in der Leistung und Transparenz zu zeigen.

Gibt es einen Grund, Ihr Problem kann nicht unendlich einfacher durch Verwendung eines Arrays gelöst werden, oder ist das nur ein Wunsch-I-wusste Frage?

EDIT: Schauen Sie sich diese Frage weitere Informationen.

Andere Tipps

Nein, kann man nicht. Mit den Klammern ([]) wie das ist „Arrayaccess“ in PHP bezeichnet und ist auf dem stdClass Objekt nicht implementiert.

Es klingt wie Sie könnte wollen so etwas wie

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

Sie können auch versuchen, ein Array als stdClass Gießen zu sehen, was passiert.

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

Ich kann nicht wirklich sehen, was Sie tun bedeuten zu, kurz

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

Sie können nicht einfach „Push“ ein Feld auf ein Objekt. Sie müssen den Namen des Feldes, um zu wissen, den Wert sowieso abgerufen werden, so ist es ziemlich viel Unsinn.

Ein Objekt ist kein Array. Wenn Sie numerisch indizierte Elemente wollen, ein Array verwendet werden.

Wenn Sie benannte Elemente verwenden entweder ein Objekt oder ein assoziatives Array.

Was, warum Sie ein anderes Verhalten, wenn es darum, dann ist es, weil in dem Array, werden Sie keinen Index spezifiziert, so PHP die Länge des Array als Index verwendet. Mit dem Objekt, müssen Sie den Namen angeben (in diesem Fall ‚a‘).

Das andere, was Sie tun wollen kann, ist ein Objekt haben, mit einem Element, das ein Array ist:

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

auch nicht vergessen, können Sie einen Array an ein Objekt werfen:

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

Nur aus Gründen der OOP, verwenden Sie keine Klassen. Wenn Sie wirklich diese Funktionalität implementieren möchten, verwenden Sie diese Klasse:

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

Sie können genau das bekommen, das in JavaScript.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top