So drucken Sie alle Eigenschaften eines Objekts

Lesezeit: 1 Minute

Benutzer-Avatar
Stapler

Ich habe ein unbekanntes Objekt auf der PHP-Seite.

Wie kann ich es ausdrucken/wiedergeben, damit ich sehen kann, welche Eigenschaften/Werte es hat?

Was ist mit Funktionen? Gibt es eine Möglichkeit zu wissen, welche Funktionen ein Objekt hat?

  • (@Brad Lowry möchte etwas mit Ihnen teilen. Ich habe seinen Text wörtlich kopiert, ohne in irgendeiner Weise zu seinem Inhalt beigetragen zu haben): Dort sind zwei Unterschiede zwischen print_r() und var_dump(). var_dump() kann mehrere nehmen $expression Parameter (kein Problem). Jedoch, print_r() hat einen optionalen Parameter $return was standardmäßig FALSE ist, aber auf TRUE gesetzt werden kann, wodurch die Funktion die Ausgabe “zurückgibt”, anstatt sie nur auszudrücken. Dies kann sehr nützlich sein, wenn Sie die sammeln möchten print_r() Ergebnis und drücken Sie es dann in einem Entwicklerblock am Ende Ihrer Ausgabe aus.

    – Varocarbas

    19. September 2015 um 7:53 Uhr

  • @varocarbas, “kann aber auf TRUE gesetzt werden” <- danke dafür.

    – Coisox

    3. Oktober 2018 um 1:22 Uhr

  • @Coisox Ehrlich gesagt erinnere ich mich nicht einmal an die genauen Gründe, warum ich das geschrieben habe (ich denke, dass jemand ohne genügend Ruf versucht hat, diese Ideen zu teilen, indem er eine neue Antwort gepostet hat, die ich im Rahmen meiner Moderationspflichten gelöscht habe), aber es ist so klar, dass Sie eher Brad Lowry als mir danken sollten. Auch ohne mich genau an diesen Moment zu erinnern und meinen eindeutigen Hinweis auf den wahren Autor zu ignorieren, kann ich Ihnen sagen, dass ich keinen Teil dieses Textes mit Sicherheit geschrieben habe.

    – Varocarbas

    4. Oktober 2018 um 7:51 Uhr

  • Die Verwendung des zweiten optionalen Arguments ist unglaublich! Für ein $product-Objekt in einem Webshop kann ich jetzt verwenden print_r($products,True) Anstatt von get_object_vars($product) in der Debug-Protokollierung über error_log(...,0). Und man erhält zusätzlich die Schlüsselwerte der Objektvariablen, die in meinem Fall als assoziatives Array organisiert sind. Ich habe mich gefragt, warum print_r($product) als Ergebnis 1 zurückgegeben hat. Vielen Dank an Brad Lowry!

    – feli_x

    1. Mai 2020 um 12:38 Uhr

  • Ein Hinweis bei der Verwendung von print_r zum Debuggen: Verwenden Sie es immer mit dem zweiten Argument, das als wahr angegeben ist, um Fehler zu verhindern. Z.B error_log("print_r(\$product) = ".print_r($product),0); verursachte in meinem Fall einen Fehler in einem Connector-Skript, während error_log("print_r(\$product,true) = ".print_r($product,true),0); war in Ordnung. (Und gab auch die gewünschte Ausgabe 🙂

    – feli_x

    1. Mai 2020 um 13:40 Uhr


Benutzer-Avatar
Peter Aytai

<?php var_dump(obj) ?>

oder

<?php print_r(obj) ?>

Dies sind die gleichen Dinge, die Sie auch für Arrays verwenden.

Diese zeigen geschützte und private Eigenschaften von Objekten mit PHP 5. Statische Klassenmitglieder werden laut Handbuch nicht angezeigt.

Wenn Sie wissen möchten, welche Mitgliedsmethoden Sie verwenden können get_class_methods():

$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) 
{
    echo "$method_name<br/>";
}

Verwandte Sachen:

get_object_vars()

get_class_vars()

get_class() <-- für den Namen der Instanz

  • Was ist mit Funktionen? Gibt es eine Möglichkeit zu wissen, welche Funktionen ein Objekt hat?

    – Stapler

    14. Juni 2010 um 1:17 Uhr

  • Ich habe oben get_class_methods() hinzugefügt.

    – Peter Ajtai

    14. Juni 2010 um 1:35 Uhr

  • Dies zeigt die Klassendaten, nicht die spezifischen Objektdaten.

    – Schwarz

    21. September 2020 um 13:56 Uhr

  • Sie können auch das HTML

    
    

    hinzufügen, um eine sauberere Ausgabe zu erhalten.

    – Marco Floriano

    3. Oktober 2020 um 18:10 Uhr

Benutzer-Avatar
felipsmartins

Da noch niemand einen Reflection-API-Ansatz bereitgestellt hat, ist hier, wie es gemacht werden würde.

class Person {
    public $name="Alex Super Tramp";

    public $age = 100;

    private $property = 'property';
}


$r = new ReflectionClass(new Person);
print_r($r->getProperties());

//Outputs
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => name
            [class] => Person
        )

    [1] => ReflectionProperty Object
        (
            [name] => age
            [class] => Person
        )

    [2] => ReflectionProperty Object
        (
            [name] => property
            [class] => Person
        )

)

Der Vorteil bei der Verwendung von Reflektion besteht darin, dass Sie wie folgt nach Sichtbarkeit der Eigenschaft filtern können:

print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));

Seit Person::$property privat ist, wird es beim Filtern nach IS_PRIVATE zurückgegeben:

//Outputs
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => property
            [class] => Person
        )

)

Lesen Sie die Dokumente!

var_dump($obj); 

Wenn Sie weitere Informationen wünschen, können Sie eine ReflectionClass verwenden:

http://www.phpro.org/manual/language.oop5.reflection.html

Benutzer-Avatar
DevWL

Um weitere Informationen zu erhalten, verwenden Sie diese benutzerdefinierte TO($someObject)-Funktion:

Ich habe diese einfache Funktion geschrieben, die nicht nur die Methoden eines bestimmten Objekts anzeigt, sondern auch seine Eigenschaften, Kapselung und einige andere nützliche Informationen wie Versionshinweise, falls vorhanden.

function TO($object){ //Test Object
                if(!is_object($object)){
                    throw new Exception("This is not a Object"); 
                    return;
                }
                if(class_exists(get_class($object), true)) echo "<pre>CLASS NAME = ".get_class($object);
                $reflection = new ReflectionClass(get_class($object));
                echo "<br />";
                echo $reflection->getDocComment();

                echo "<br />";

                $metody = $reflection->getMethods();
                foreach($metody as $key => $value){
                    echo "<br />". $value;
                }

                echo "<br />";

                $vars = $reflection->getProperties();
                foreach($vars as $key => $value){
                    echo "<br />". $value;
                }
                echo "</pre>";
            }

Um Ihnen zu zeigen, wie es funktioniert, werde ich jetzt eine zufällige Beispielklasse erstellen. Lassen Sie uns eine Klasse namens Person erstellen und einige Versionshinweise direkt über der Klassendeklaration platzieren:

        /**
         * DocNotes -  This is description of this class if given else it will display false
         */
        class Person{
            private $name;
            private $dob;
            private $height;
            private $weight;
            private static $num;

            function __construct($dbo, $height, $weight, $name) {
                $this->dob = $dbo;
                $this->height = (integer)$height;
                $this->weight = (integer)$weight;
                $this->name = $name;
                self::$num++;

            }
            public function eat($var="", $sar=""){
                echo $var;
            }
            public function potrzeba($var =""){
                return $var;
            }
        }

Lassen Sie uns nun eine Instanz einer Person erstellen und sie mit unserer Funktion umschließen.

    $Wictor = new Person("27.04.1987", 170, 70, "Wictor");
    TO($Wictor);

Dies gibt Informationen über den Klassennamen, Parameter und Methoden aus, einschließlich Kapselungsinformationen und die Anzahl der Parameter, Namen der Parameter für jede Methode, Methodenposition und Codezeilen, wo sie vorhanden sind. Siehe die Ausgabe unten:

CLASS NAME = Person
/**
             * DocNotes -  This is description of this class if given else it will display false
             */

Method [  public method __construct ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 75 - 82

  - Parameters [4] {
    Parameter #0 [  $dbo ]
    Parameter #1 [  $height ]
    Parameter #2 [  $weight ]
    Parameter #3 [  $name ]
  }
}

Method [  public method eat ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 83 - 85

  - Parameters [2] {
    Parameter #0 [  $var="" ]
    Parameter #1 [  $sar="" ]
  }
}

Method [  public method potrzeba ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 86 - 88

  - Parameters [1] {
    Parameter #0 [  $var="" ]
  }
}


Property [  private $name ]

Property [  private $dob ]

Property [  private $height ]

Property [  private $weight ]

Property [ private static $num ]

versuchen Sie es mit Ziemlich Müll es funktioniert super für mich

Benutzer-Avatar
Tauchen

um die Objekteigenschaften zu kennen, ist var_dump(object) der beste Weg. Es zeigt alle damit verbundenen öffentlichen, privaten und geschützten Eigenschaften an, ohne den Klassennamen zu kennen.

Aber im Falle von Methoden müssen Sie den Klassennamen kennen, sonst ist es meiner Meinung nach schwierig, alle zugehörigen Methoden des Objekts zu erhalten.

Benutzer-Avatar
Dmytro Myronenko

<?php
    echo "<textarea name="mydata">\n";
    echo htmlspecialchars($data)."\n";
    echo "</textarea>";
?>

  • Willkommen bei Stack Overflow und vielen Dank für Ihre Antwort. Würden Sie Ihre Antwort bitte bearbeiten, um eine Erklärung Ihres Codes einzufügen? Das wird zukünftigen Lesern helfen, besser zu verstehen, was vor sich geht, und insbesondere den Mitgliedern der Community, die neu in der Sprache sind und Schwierigkeiten haben, die Konzepte zu verstehen. Das ist hier besonders wichtig, wo es eine etablierte akzeptierte Antwort gibt. Unter welchen Umständen würde Ihr Ansatz der akzeptierten Antwort oder einer der anderen Antworten vorgezogen werden?

    – Jeremy Caney

    2. August 2021 um 2:40 Uhr

1352720cookie-checkSo drucken Sie alle Eigenschaften eines Objekts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy