


Tutorial zum sicheren Zugriff auf verschachtelte STD -Class -Objekteigenschaften in PHP
Verstehen Sie das Objekt und den Zugriff des Eigenschaftszugriffs PHP STDCLASS
In PHP ist STDClass eine allgemeine leere Klasse, die normalerweise zur Umwandlung assoziativer Arrays in Objekte verwendet wird, oder wenn der Objekttyp von der Funktion json_decode () ohne Angabe eines echten Parameters zurückgegeben wird. Auf die Eigenschaften kann durch -> (Pfeilbetreiber) zugegriffen werden, anstatt [] (quadratische Klammern) wie ein Array zu verwenden.
Betrachten Sie die folgende STD -Class -Struktur für VAR_DUMP -Ausgabe:
Array (Größe = 2) 'raw' => Objekt (STDClass) [6] public 'actioncodedescription' => string 'procesor.Error.203' (Länge = 20) öffentliche 'Params' => Objekt (STDClass) [7] public 'respcode_desc' => String 'Transaktion abgelehnt' (Länge = 83)
Aus dieser Struktur können wir sehen, dass $ order-> raw ein STDClass-Objekt ist, das zwei gemeinsame Eigenschaften enthält: actioncodedescription und Parameter. Die Params -Eigenschaft selbst ist ein STDClass -Objekt, das die Eigenschaft respcode_desc enthält.
Der falsche Zugriffsweg wie $ this-> raw-> params ['0']-> respcode_desc;, der versucht, Parameter als Array zu behandeln und mit dem numerischen Index '0' auf seine Elemente zuzugreifen, ist falsch. Da Parames ein STD -Class -Objekt sind, sollten die Eigenschaften über den -> Operator zugegriffen werden. Dieser Fehler kann zu Fehlern wie dem Versuch führen, die Eigenschaft 'respcode_desc' aus Nichtobjekt oder den Versuch, auf den Wert des Typs des Typs zuzugreifen, auf den Wert des Typs zuzugreifen.
Sicher auf die Anwendung verschachtelter Immobilien zugreifen: ISSET ()
Um sicher auf die verschachtelte STD -Klasse -Eigenschaft zuzugreifen und Fehler zu vermeiden, die durch die nicht vorhandene Eigenschaft verursacht werden, müssen wir überprüfen, ob es vor der Verwendung vorliegt. Die Funktion von PHP ist der Schlüssel zum Erreichen dieser Art. Für verschachtelte Eigenschaften mit mehreren Schichten muss Schicht für Schicht überprüft werden.
Hier finden Sie eine Beispielmethode zur Implementierung der sicheren Zugriffslogik in der Auftragsklasse:
Klassenordnung { öffentlich $ raw; Funktion __construct ($ obj) { $ this-> raw = $ obj; } // öffentliche Methode verwendet, um Nachrichten öffentliche Funktion getCibMessage () zu erhalten { $ obj = $ this-> raw; // Verweis auf das ursprüngliche Objekt vereinfachen // Überprüfen Sie, ob die Eigenschaft "Params" vorhanden ist und ob die Eigenschaft "respcode_desc" im Objekt "Params" vorhanden ist, wenn (isset ($ obj-> params) && isset ($ obj-> params-> respcode_desc) { params-> respcode_desc; } anders { // Ansonsten fällt auf den Wert zurück, der 'actioncodedescription' zurückgibt $ obj-> actionCodedescription; } } // Optional: bequem für Ausgabeobjektinhalte während des Debuggens der öffentlichen Funktion __toString () { return json_encode ($ this-> raw, json_pretty_print); } }
Detaillierte Erläuterung der Codelogik:
- $ obj = $ this-> raw ;: Erhalten Sie zuerst das ursprüngliche STD-Class-Objekt, das aus Gründen der nachfolgenden Referenzen betrieben werden muss.
- if (isset ($ obj-> params) && isset ($ obj-> params-> respcode_desc)): Dies ist die Kernsicherungsprüfunglogik.
- ISSET ($ OBJ-> Params): Überprüfen Sie zunächst, ob $ obj (d. H. $ this-> raw) eine Eigenschaft mit dem Namen Params enthält. Wenn keine Parameter vorhanden sind, wirft der nachfolgende $ obj-> params-> respcode_desc-Zugriff einen Fehler auf.
- ISSET ($ OBJ-> Params-> respcode_desc): Wenn das Attribut des Params vorhanden ist, prüfen Sie weiter, ob das Params-Objekt von $ obj-> eine Eigenschaft namens respcode_desc enthält. Nur wenn beide Eigenschaftenstufen existieren, kann Respcode_desc sicher zugreifen.
- Rückgabe $ obj-> params-> respcode_desc ;: Wenn die obige Bedingung wahr ist, wird der Wert von respcode_desc sicher zurückgegeben.
- sonst {return $ obj-> actionCodedescription; }: Wenn respcode_desc nicht existiert oder seine übergeordneten Parameter nicht existieren, wird ein Fallback -Mechanismus bereitgestellt, um den Wert von ActionCodedescription zurückzugeben. Diese Fallback -Strategie ist sehr nützlich, wenn sie mit ungewisse Datenstrukturen zu tun haben, um sicherzustellen, dass eine aussagekräftige Nachricht immer zurückgegeben werden kann.
Vollständige Beispiele und Anwendungen
Um besser zu verstehen, wie die obige Methode in einem realen Projekt verwendet wird, geben wir ein vollständiges Beispiel an:
Php Klassenordnung { öffentlich $ raw; Funktion __construct ($ obj) { $ this-> raw = $ obj; } Öffentliche Funktion getCibMessage () { $ obj = $ this-> raw; if (isset ($ obj-> params) && isset ($ obj-> params-> respcode_desc)) { $ obj-> params-> respcode_desc zurückgeben; } anders { Return $ OBJ-> ActionCodedescription; } } öffentliche Funktion __toString () { return json_encode ($ this-> raw, json_pretty_print); } } // Simulieren Sie ein STD -Class -Objekt, das eine vollständige verschachtelte Struktur enthält $ datawithparams = json_decode ('{ "actioncodedescription": "Processing.Error.203", "Params": {{ "respcode_desc": "Transaktion durch Payment Gateway abgelehnt" } } '); // Simulieren Sie ein STDCASS -Objekt fehlende Params oder respcode_desc $ datawithoutparams = json_decode ('{{{{{{{{{{{ "actioncodedescription": "processing.success.100" } '); $ dataEmptyparams = json_decode ('{{{ "actioncodedescription": "processing.warning.300", "Params": {} } '); // Erstellen Sie eine Bestellinstanz und testen Sie $ order1 = new order ($ datawithparams); Echo "Bestellung 1 Nachricht:". $ order1-> getCibMessage (). Php_eol; // Erwartete Ausgabe: Transaktion durch Payment Gateway abgelehnt $ order2 = Neue Bestellung ($ datawithoutParams); echo "order 2 meldung:". $ order2-> getCibMessage (). Php_eol; // erwartete Ausgabe: processing.success.100 $ order3 = Neue Bestellung ($ dataEmptyParams); Echo "Bestellung 3 Nachricht:". $ order3-> getCibMessage (). Php_eol; // erwartete Ausgabe: processing.warning.300 // Drucken Sie die vollständigen Rohdaten (unter Verwendung der __toString -Methode) Echo "\ norder 1 Rohdaten: \ n". $ order1. Php_eol; ?>
Führen Sie den obigen Code aus und Sie werden feststellen, dass die Methode getCibMessage () intelligent die am besten geeignete Nachricht basierend auf der tatsächlichen Struktur des STDClass -Objekts zurückgibt, wodurch die durch fehlenden Attribute verursachten Laufzeitfehler effektiv vermieden werden.
Best Practices und Vorsichtsmaßnahmen
- Dynamik der Datenquellen: Das STDClass -Objekt wird häufig verwendet, um dynamische Daten zu verarbeiten, die aus externen APIs, Datenbanken oder Konfigurationsdateien erhalten werden (z. B. den Standardrückgabewert von json_decode ()). Da die Struktur dieser Daten möglicherweise nicht immer konsistent ist, ist die Verwendung von ISSet () für Sicherheitsprüfungen unerlässlich.
- PHP 7 NULL Merge Operator (??): Für einfache Existenzüberprüfung und Standardwerte für Eigenschaften ist der von Php 7 eingeführte Null -Merge -Operator sehr bequem. Zum Beispiel: $ value = $ obj-> prop? 'Standard';. Für tief verschachtelte Eigenschaften kann es jedoch nicht direkt die Kettenprüfung von ISSet () ersetzen, da es immer noch einen Fehler wirft, wenn die Zwischenstufe nicht vorhanden ist. Zum Beispiel: $ value = $ obj-> params-> respcode_desc ?? 'Standard'; Ein Fehler wird gemeldet, wenn $ obj-> Parames nicht vorhanden sind. Daher ist ISSET () -Kettenprüfung immer noch die erste Wahl.
- Type Conversion- und Datenübertragungsobjekte (DTO): Für komplexere Anwendungen können Sie sie in eine benutzerdefinierte PHP -Klasse (Datenübertragungsobjekte, DTO) konvertieren, wenn die Struktur der STD -Klasse bekannt und stabil ist. Dies kann durch manuelles Zuordnen von Eigenschaften im Konstruktor oder durch Verwendung fortgeschrittener Bibliotheken wie Symfony/Serializer erfolgen. Die Verwendung von DTO kann eine größere Sicherheitstypsicherheit, Codeaufforderungen und bessere Wartbarkeit bieten.
- Fehlerbehandlung: Zusätzlich zum Fallback -Mechanismus kann für einige Schlüsseldaten gültige Informationen nicht erhalten werden, selbst wenn der Fallback zurück ist, kann eine Ausnahme ausgelöst werden oder ein Fehlerprotokoll kann zur weiteren Problemdiagnose aufgezeichnet werden.
Zusammenfassen
Sichere Zugriff auf verschachtelte STD -Class -Objekteigenschaften in PHP ist eine grundlegende Fähigkeit, wenn es um dynamische Datenstrukturen geht. Durch das Verständnis der Eigenschaften der STDClass und der Kombination der ISSet () -Funktion für Multi-Level-Attribut-Existenzüberprüfungen können wir robuste und fehlertolerante Code schreiben. Wenn Sie Klassenmethoden entwerfen, verbessert die Einkapselung dieser sicheren Zugriffslogik und die Bereitstellung angemessener Standardwerte oder Fallback -Mechanismen die Benutzerfreundlichkeit und Stabilität des Codes erheblich.
Das obige ist der detaillierte Inhalt vonTutorial zum sicheren Zugriff auf verschachtelte STD -Class -Objekteigenschaften in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PhparrayShandledatacollectionSeffictionlyusingInedorassociativestruationen;

TheobserverdesignPatternNenableAtomaticnotificationOfDependentObjectSwhenasubjectsSstatechanges.1) itdefinesaon-to-ManyDependencyBetobjects; 2) thesubjectmaintainSalistoBoBserverSandnotifiesthemviaAcommonNection;

$ _Cookieisaphpsuperglobalfor AccessingcookieStbytheBrowser; CookiesAresetusingsetcookie () vor dem Output, Readvia $ _cookie ['name'], aktualisiert Byresending mit den Sekton, mit SCURITYBESTPRACTICING, MIT SECURITYBESTPRACTICICING, MIT SECURITYBESTPRECTICE

B-treeIndexesarebestFormOstPhpapplications, als Theysupportequality und RangeQueries, Sorting und saridealforcolumnSusedinwhere, Join, ORORDBYCLAUSS;

Auf öffentliche Mitglieder können nach Belieben zugegriffen werden. 2. private Mitglieder können nur innerhalb der Klasse zugegriffen werden. 3.. Geschützte Mitglieder können in Klassen und Unterklassen zugegriffen werden. 4. Die rationale Verwendung kann die Sicherheit und die Wartbarkeit der Code verbessern.

Usedate ('y-m-dh: i: s') witdate_default_timezone_set () togetcurrentDateAnDimeInphp, um sicherzustellen, dass AccurateresultsbySettingThedEredTimeZonelike'america/New_York'beForecallingDate () () sicherstellt.

UsedatetimefordateInphp: createwitheNewdatetime (), formatwithFormat (), modifyviaadd () modify (), setTimezoneswithDatetimezone und CompareUSUKTERSORDERSordiff () Togetintervals.

Mithilfe von mySQLI-objektorientierter Methode: Erstellen Sie eine Verbindung, Vorprozess-Update-Anweisungen, binden Sie Parameter, führen Sie die Ergebnisse aus und überprüfen Sie sie schließlich die Ressource. 2. Mithilfe der MySQLI -Prozedurmethode: Verbindung mit der Datenbank über Funktionen herstellen, Anweisungen vorbereiten, Parameter binden, Aktualisierungen durchführen und die Verbindung nach Verarbeitungsfehlern schließen. 3.. Verwenden Sie PDO: Stellen Sie eine Verbindung zur Datenbank über PDO ein, setzen Sie den Ausnahmemodus, stellen Sie SQL vor, binden Sie Parameter, führen Sie Aktualisierungen durch, verwenden Sie Try-Catch, um Ausnahmen zu verarbeiten und schließlich Ressourcen zu veröffentlichen. Verwenden Sie immer Vorverarbeitungsanweisungen, um die SQL -Injektion zu verhindern, die Benutzereingabe zu überprüfen und Verbindungen in der Zeit zu schließen.
