Portal > Foren > PHP > PHP-Programmierung > An interne ID eines Objektes rankommen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 04.12.2006, 14:50 Nach oben    #1
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard An interne ID eines Objektes rankommen

Hi.

Wenn cih ein Objekt "dumpe", dann sehe ich dort immer quasi die interne ID des Objektes:

Code:
object(Page)#26
 
Gibt es eine Möglickeit an diesen Wert ranzukommen (außer via preg_mach(var_export()))?

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2006, 15:09 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ich hab jetzt gesucht aber gefunden hab ich nichts. Bin auf ne Lösung auch gespannt.
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2006, 15:14 Nach oben    #3
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
Standard

leider ohne helfen zu können würde mich interessieren was man damit anfangen kann.
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2006, 15:33 Nach oben    #4
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Mir ist bei einem Update xdebug abhanden gekommen und ich konnte noch keine Lösung dafür finden. Jetzt hab ich mich gerade an eine lesbare Exception-Ausgabe gekümmert und da wäre dieser Wert net schlecht.

Im Moment (sehr wüst und mit dem Workaround via var_dump) sieht das so aus:
PHP-Code:
try {
    
$Cms = new FrontController();
    
$Cms->run();

} catch (
Exception_BaseException $e) {

    
$sAbspath realpath(dirname(__FILE__));

    echo <<<EOT
<style>
.exception {
    background-color: #fff;
    font-family: mono;
    font-size: 11px;
}

.exception a {
    color: #00f;
}

.exception td {
    vertical-align: top;
    padding: 5px;
    background-color: #77f;
    font-size: 11px;
}
</style>
EOT;

    print 
'<div class="exception">';
    print 
"<h1>".get_class($e)."</h1>\n";
    print 
"<h2>{$e->getMessage()} ({$e->getCode()})</h2>\n\n";
    print 
str_replace($sAbspath''$e->getFile());
    print 
'(' $e->getLine() . ")<br /><br />\n";

    
$aTrace $e->getTrace();
    
$iNum count($aTrace);
    
$aObjects = array();
    
$aArrays = array();

    echo 
'<table>';

    foreach (
$aTrace as $i => $aTracePart) {

        
$sFile str_replace($sAbspath''$aTracePart['file']);
        echo 
'<tr>';
        echo 
'<td>'$iNum $i'</td>';
        echo 
'<td>';
        if (isset(
$aTracePart['class']))
            echo 
$aTracePart['class'], '::';

        echo 
$aTracePart['function'], '<ul>';
        foreach (
$aTracePart['args'] as $mArg) {

            echo 
'<li>(';
            echo 
gettype($mArg);
            echo 
') ';
            switch (
gettype($mArg)) {

                case 
'object':
                
ob_start();
                
var_dump($mArg);
                
$s ob_get_contents();
                
preg_match('|^object\([a-zA-Z0-9_\-]*\)#([0-9]*)|'$s$aParts);
                
ob_end_clean();
                
$iId = (int) $aParts[1];

                
$aObjects[$iId] = $mArg;
                echo 
'<a href="#object_' $iId '">';
                echo 
get_class($mArg);
                echo 
' #'$iId;
                echo 
'</a>';
                break;

                case 
'array':
                
$aArrays[] = $mArg;
                
$iId count($aArrays) - 1;
                echo 
'<a href="#array_' $iId '">';
                echo 
get_class($mArg);
                echo 
'</a>';
                break;

                case 
'string':
                
$mArg str_replace($sAbspath''$mArg);
                if (
strlen($mArg) > 20) {
                    
$mArg substr($mArg05) . ' &hellip; ' substr($mArg, -10);
                }
                echo 
$mArg;
                break;

                default:
                echo 
$mArg;
            }
            echo 
'</li>';
        }
        echo 
'</td>';
        echo 
'<td>'$sFile' ('$aTracePart['line'], ')</td>';
        echo 
"</tr>";
    }
    echo 
"</table></div>";

    foreach (
$aObjects as $iId => $Obj) {
        echo 
'<hr/><a name="object_' $iId '"><pre>';
        
var_dump($Obj);
        echo 
'</pre>';
    }
    
    foreach (
$aArrays as $iId => $aArray) {
        echo 
'<hr/><a name="array_' $iId '"><pre>';
        
var_dump($aArray);
        echo 
'</pre>';
    }
    die;

Die Objekte, die als Parameter übergeben werden, werden nicht direkt ausgegeben, sondern unter der eigentlichen Tabelle ausgespuckt und entsprechend verlinkt.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2006, 17:56 Nach oben    #5
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 690
Standard

Also wenn ich nen Dump (var_dump) auf eine Klasse mache, gibt mir die Zahl in Klammern dahinter nur die Anzahl der Elemente im Objekt wieder!? Oder ist das eine Neuerung in PHP5?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.12.2006, 20:41 Nach oben    #6
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
Oder ist das eine Neuerung in PHP5?
Keine Ahnung, ob das neu ist.

PHP-Code:
class A
{
    protected 
$foo;
}

$A = new A;
$B = new A;
$C $A;

var_dump($A);
var_dump($B);
var_dump($C); 
Code:
object(A)#1 (1) {
  ["foo:protected"]=>
  NULL
}
object(A)#2 (1) {
  ["foo:protected"]=>
  NULL
}
object(A)#1 (1) {
  ["foo:protected"]=>
  NULL
}
Zum Thema:
Die Reflection-API scheint es auch nicht herzugeben.

Basti

Geändert von Basti (04.12.2006 um 20:50 Uhr)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2007, 12:01 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Muss das hier gerade nochmal rauskramen.
Hast du eine "direktere" Lösung gefunden?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2007, 14:36 Nach oben    #8
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Nein.
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.03.2007, 18:37 Nach oben    #9
Benutzer
 
Registriert seit: 02.09.2005
Beiträge: 68
Standard

Könnts sein das du

print_r( $class, true ); suchst?
Julied64 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 05:54 Nach oben    #10
Neuer Benutzer
 
Registriert seit: 31.05.2006
Beiträge: 24
Standard

Was bringt dir die Nummer? Das is eine laufende Nummer, an welcher Stelle das Objekt generiert wurde. Im Regelfall variert sie aber zu stark, als das man sinnvolle Schlüsse daraus ziehen kann ^^
KingCrunch ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 07:45 Nach oben    #11
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Ich persönlich brauchte das für das Debugging. Mein Problem hat sich aber erledigt.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 11:02 Nach oben    #12
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von KingCrunch Beitrag anzeigen
Was bringt dir die Nummer? Das is eine laufende Nummer, an welcher Stelle das Objekt generiert wurde. Im Regelfall variert sie aber zu stark, als das man sinnvolle Schlüsse daraus ziehen kann ^^
Mir ging es auch um eine Debug-Anzeige. Es ist einfach nervig, wenn ein Objekt 20mal komplett aufgelistet wird, anstatt nur einmal je Instanz.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.03.2007, 17:10 Nach oben    #13
Christian Schuhmann
 
Benutzerbild von bobby
 
Registriert seit: 09.03.2007
Ort: Nürnberg
Beiträge: 66
Standard

Wenn ich dich jetzt richtig verstanden haben, willst du eine eindeutige Objectid (-hash). Vielleicht kann dir http://de.php.net/manual/de/function...bject-hash.php weiterhelfen.

bobby
bobby ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.03.2007, 21:36 Nach oben    #14
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Dann scheints also doch sowas zu geben. Oder was meint "same object"? Meint es, dass zwei Objekte identisch sind (also quasi nur eine Prüfsumme gebildet wird) oder meint es tatsächlich Referenzen?

Hab hier auf dem Mac noch keine MAMP-Umgebung installiert, drum kann ichs grad nicht testen. Der Test sähe aber etwa so aus:

PHP-Code:
<?php

class Foo {}

$A = new Foo;
$B $A;
$C = new Foo;

print (
spl_object_hash($A) === spl_object_hash($B))
    ? 
"okay\n" "nok\n";

print (
spl_object_hash($A) !== spl_object_hash($C))
    ? 
"okay\n" "nok\n";
Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.03.2007, 21:57 Nach oben    #15
Christian Schuhmann
 
Benutzerbild von bobby
 
Registriert seit: 09.03.2007
Ort: Nürnberg
Beiträge: 66
Standard

Hi Basti,

PHP-Code:
<?php

class Foo {}

$A = new Foo;
$B $A;
$C = new Foo;

print (
spl_object_hash($A) === spl_object_hash($B)) ? "A == B\n" "A != B\n";

print (
spl_object_hash($A) !== spl_object_hash($C)) ? "A != C\n" "A == C\n"
    
?>
Ergibt:
PHP-Code:
== B
!= 
bobby.
bobby ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.03.2007, 23:07 Nach oben    #16
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Na, dann passts doch. Vielen dank.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2007, 14:37 Nach oben    #18
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Hab hier[1] (übrigens ein sehr schönes Tutorial!) gerade folgendes gelesen:

Zitat:
Objects quoted in string context resolve to a unique identifier (even if __toString() is defined).
[1] http://devzone.zend.com/node/view/id/6

Bei folgendem Test erhalte ich (5.2.0) jedoch einen fatal error:
PHP-Code:
<?php

class A
{
    protected 
$foo;
}

$A = new A;
$B = new A;
$C $A;

echo 
"$A\n";
echo 
"$B\n";
echo 
"$C\n";
Weiß wer von euch was darüber?

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2007, 14:52 Nach oben    #19
Verplanter Benutzer
 
Registriert seit: 14.12.2004
Beiträge: 239
Standard

"Catchable fatal error: Object of class A could not be converted to string "...

Mit ...

PHP-Code:
print_r($A); 
gehts.

Ausgabe:
PHP-Code:
A Object ( [foo:protected] => ) 
__________________
Das Leben ist zwar bloß ein Adventure-Game, aber die Grafik ist verdammt gut.
Ich such immer noch den Cheat für unlimited money!

Geändert von DasMööp (29.03.2007 um 14:55 Uhr)
DasMööp ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2007, 14:55 Nach oben    #20
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von DasMööp Beitrag anzeigen
Mit ...

PHP-Code:
print_r($A); 
gehts.
Was verstehst du unter "gehts" bzw. was hat das mit der Anforderung zu tun?

Zitat:
Objects quoted in string context resolve to a unique identifier (even if __toString() is defined).
Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Interne Klassen zuweisung Berti PHP-Programmierung 5 03.04.2007 12:14


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search