Statische Trait-Methode liefert NULL-Resultat
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
-
Gelöst
#NR_Sprache.php trait NR_Sprache { use NR_Konfig; public static function Sprachdatei_laden($Sprachobjekt) { $XMLDatei = simplexml_load_file(NR_Konfig::$Datei_Sprache); $XMLSprachenListe = array("Deutsch", "Italienisch", "Japanisch"); foreach($XMLSprachenListe as $SprachenDurchgang) { if($SprachenDurchgang === $Sprachobjekt) { $XMLDatei = $XMLDatei->$Sprachobjekt; return $XMLDatei; } } return $XMLDatei; } } #NR_Meldungen.php trait NR_Meldungen { use NR_Sprache; public static function Fehler($Code) { $XMLFehler = NR_Sprache::Sprachdatei_laden("Deutsch")->Fehler; $XMLFehlerListe = array(0=>$XMLFehler->Code_0,1=>$XMLFehler->Code_1,2=>$XMLFehler->Code_2); foreach(array_keys($XMLFehlerListe) as $AnzahlFehlerID) { if($AnzahlFehlerID === $Code) { return $XMLFehlerListe[$AnzahlFehlerID][0]; } } } } #NR_Sprache.xml (vereinfacht) <?xml version="1.0" encoding="UTF-8"?> <PS> <Deutsch> <Fehler> <Code_0>Ungültige Zeichenanzahl</Code_0> <Code_1>Ungültige E-Mail-Adresse angegeben</Code_1> <Code_2>Ungültiges Zeichen verwendet</Code_2> </Fehler> </Deutsch> </PS>
---------------------------------------------------------
Ich habe folgende XML-Datei:
<?xml version="1.0" encoding="UTF-8"?> <PS> <Sprache ID="Deutsch"> <Fehler> <Code_0>Ungültige Zeichenanzahl</Code_0> <Code_1>Ungültige E-Mail-Adresse angegeben</Code_1> <Code_2>Ungültiges Zeichen verwendet</Code_2> </Fehler> </Sprache> </PS>
Hier ist die Variable hinterlegt:
trait NR_Konfig { static $Datei_Sprache = "NR_Sprache.xml"; }
Nun wird die XML-Datei geladen und Element mit "ID"-Attribute-Wert "Deutsch" ausgewählt:
trait NR_Sprache { use NR_Konfig; public static function Sprachdatei_laden($Sprachobjekt="Deutsch") { $XMLDatei = simplexml_load_file(self::$Datei_Sprache); switch($Sprachobjekt) { case "Deutsch": $XMLAusgewaehlteSprache = $Sprachobjekt; break; } $XMLDatei->Sprache["ID"] = $XMLAusgewaehlteSprache; return $XMLDatei; } }
Als nächstes ordne ich den XML-Nodes Fehler-Codes zu:
trait NR_Meldungen { use NR_Sprache; public static function Fehler($Code) { $XMLFehler = self::Sprachdatei_laden(); $XMLFehlerListe = array(0=>$XMLFehler->Code_0, 1=>$XMLFehler->Code_1, 2=>$XMLFehler->Code_2 ); foreach($XMLFehlerListe as $FehlerCode) { if($FehlerCode[0] == $Code) { # print und return probiert print $FehlerCode[1]; } } } }
Da die unstatische Verwendung der trait-Methoden nicht funktionierte, wandelte ich sie in statische um.
Echt seltsam, hab deprecated Warnungen erhalten.
Kann ich da keinen return empfangen bzw. auswerten, müsste doch gehen? Sind Trait-Methoden nicht schon automatisch statisch??
Folgendes gibt den Typ Null zurück:
#Klasse KL_Formular (hat ein Interface, zwei private und eine öffentliche Methode) use NR_Meldungen; var_dump(self::Fehler(0)); $GLOBALS['PS_ANTWORT'] .= self::Fehler(0);
(Hier werden dementsprechend nur die breaks ausgegeben):
print "<br/><br/>".$GLOBALS['PS_ANTWORT'];
Kann mir da bitte evt. jemand weiterhelfen, entdeckt jemand den Fehler? Bin zu müde und unerfahren im Umgang mit traits allgemein.
Beitrag zuletzt geändert: 14.7.2020 12:04:52 von bastians-seite -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage