3 Stimmen

Php Array-Initialisierung

Ich muss ein Array von Objekten in PHP initialisieren. Derzeit habe ich den folgenden Code:

$comment = array();

Und wenn ich ein Element zum Array hinzufüge

public function addComment($c){
    array_push($this->comment,$c);
}

Hier ist $c ein Objekt der Klasse Kommentar.

Aber wenn ich versuche, Funktionen dieser Klasse mit $comment aufzurufen, erhalte ich den folgenden Fehler:

Schwerwiegender Fehler: Aufruf einer Methode getCommentString() auf einem Nicht-Objekt

Kann mir jemand sagen, wie man in PHP ein Array von Objekten initialisiert?

Danke Sharmi

3voto

philfreo Punkte 38965
$this->Kommentar = array();

2voto

Atli Punkte 7669

Sieht für mich nach einem Bereichsproblem aus.

Wenn $comments ein Element einer Klasse ist, wird das Aufrufen von $comments innerhalb einer Funktion dieser Klasse nicht tatsächlich das Element verwenden, sondern eine Instanz von $comments aus dem Bereich der Funktion.

Mit anderen Worten, wenn Sie versuchen, ein Klassenmitglied zu verwenden, verwenden Sie $this->comments, nicht nur $comments.

class foo
{
    private $bar;

    function add_to_bar($param)
    {
        // Fügt zu einem $bar hinzu, der ausschließlich in dieser
        // add_to_bar()-Funktion existiert.
        $bar[] = $param;

        // Fügt zu einer $bar-Variablen hinzu, die der 
        // Klasse gehört, nicht nur der add_to_bar()-Funktion.
        $this->bar[] = $param;
    }
}

0voto

sheats Punkte 30812

Dieser Code könnte Ihnen helfen:

$comments = array();
$comments[] = new ObjectName(); // fügt das erste Objekt dem Array hinzu
$comments[] = new ObjectName(); // fügt das zweite Objekt dem Array hinzu

// Um auf die Objekte zuzugreifen, müssen Sie den Index des Arrays verwenden
// Sie können also Folgendes tun:
echo $comments[0]->getCommentString(); // erstes Objekt
echo $comments[1]->getCommentString(); // zweites Objekt

// oder durch sie hindurch loopen
foreach ($comments as $comment) {
    echo $comment->getCommentString();
}

Ich denke, Ihr Problem liegt entweder darin, wie Sie die Objekte dem Array hinzufügen (worauf bezieht sich $this->comment?) oder Sie versuchen möglicherweise, ->getCommentString() auf das Array und nicht auf die tatsächlichen Objekte im Array aufzurufen.

0voto

Erigami Punkte 774

Sie können sehen, was sich im Array befindet, indem Sie es an print_r() übergeben:

print_r($comment);

Unter der Annahme, dass Sie Comment-Objekte darin haben, sollten Sie in der Lage sein, auf sie mit $comment[0]->getCommentString() zu verweisen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X