Warum var_dump eine Doctrine Objekte meinen Apache töten?

8

Ich habe ein sehr merkwürdiges Problem, wenn ich versuche, var_dump (oder print_r ) ein Doctrine-Objekt, meine Apache-Antworten mit einer leeren leeren Seite (200 OK-Header). Ich kann var_dump eine normale php var wie:

%Vor%

Und es funktioniert gut. Aber ich kann mit keinem Objekt aus irgendeiner Doctrine-Klasse (wie einem Ergebnis von $connection->query() oder einer Instanz einer Klasse aus meinem Objektmodell mit Doctrine).

Weiß jemand, warum das passiert?

    
j0k 19.10.2008, 13:12
quelle

4 Antworten

1

Ich hatte das manchmal, als ich versuchte, ein Objekt zu referenzieren, das sich selbst referenziert - es kommt in eine Schleife und hat keinen Speicher mehr. Möglicherweise passiert das mit dir.

Versuchen Sie, das Speicherlimit zu erhöhen ( print_r() ) und sehen Sie, ob das Problem behoben ist.

Bearbeiten: Ich denke nicht, dass es eine tatsächliche Lösung dafür gibt - es ist PHP's internes ini_set('memory_limit', '256M'); / var_dump , das die Tiefe bei Rekursion nicht einschränkt (oder zumindest nicht richtig macht). Wenn Sie die Erweiterung XDebug installieren, kann dies das integrierte print_r durch eine Version ersetzen, die die Rekursion besser verarbeitet.

    
Greg 19.10.2008, 13:29
quelle
49

Lazy Load Proxies enthalten immer eine Instanz von Doctrines EntityManager und all seinen Abhängigkeiten.

Daher wird eine var_dump möglicherweise eine sehr große rekursive Struktur ausgeben, die nicht rendern und lesen kann. Sie müssen \Doctrine\Common\Util\Debug::dump() verwenden, um das Dumping auf eine für Menschen lesbare Ebene zu beschränken. Beachten Sie, dass die Standardtiefe für diese Funktion auf 2 gesetzt ist (dies ist der zweite Parameter)

    
Mariano Argañaraz 27.12.2011 15:02
quelle
8

Verwenden Sie die Methode toArray der Klasse Doctrine_Record

%Vor%

zeigt nur die DB-Felder an und vermeidet das Auslagern der gesamten Doctrine-Interna (die Selbstreferenz / Rekursion btw enthält)

    
Julien 26.09.2010 18:11
quelle
0

Sie können toArray verwenden, wenn Sie sicher sind, dass das Objekt eine Instanz von Doctrine_Collection ist. Xdebug hilft nicht bei Doktrinenaufzeichnungen.

Die von mir vorgeschlagene Methode ist die Implementierung einer benutzerdefinierten rekursiven Funktion zum Drucken von Objekten, die Doctrine_Record :: toArray () bei Bedarf verwendet

%Vor%

Einige rekursive Funktion zum Debuggen mit maximalen Verschachtelungsebenen sind hier

Ссылка

Sehen Sie sich die Kommentare an, suchen Sie nach "Rekursion"

    
Elvis Ciotti 10.01.2012 01:35
quelle

Tags und Links