php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.09.2010, 21:04  
Neuer Benutzer
 
Registriert seit: 17.07.2009
Beiträge: 18
PHP-Kenntnisse:
Fortgeschritten
Remon befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Fehler im Klassensystem ?

Hallo erstmal,

ich habe angefangen ein kleines CMS zu schreiben und bin nun dabei einen Config Reader in XML zu schreiben. Das geht nun alles aber ich möchte eine Kapselung der Config in Sektionen damit ich sie Klassen zuweisen kann.

Nun ist es aber so das die Klasse irgendwann nichtsmehr speichert und das array leer lässt.

Code sieht so aus:

PHP-Code:
<?php
namespace Core
;


class 
Config {
    private 
$config;
    private 
$global;
    private 
$current;
    private 
$section;
    
    public function 
__construct() {
        
$this->config = array();
        
        if( 
file_exists"./conf/default.xml" ) ) {
            
$this->parseXMLsimplexml_load_file"./conf/default.xml" ) );
        }
        
        else {
            print( 
"Critical Kernel Error" );    
        }
        
        
var_dump$this );
    }
    
    private function 
parseXMLSimpleXMLElement $element ) {
        
$count 0;
        
        foreach( 
$element->children() as $child ) {
            
$attr $this->parseAttributes$child->attributes() );
            switch( 
$child->getName() ) {
                case 
'application':
                    
//Create a new empty Config Container
                    
$this->config[$attr['name']] = array();
                    
                    
//Set current
                    
$this->current $attr['name'];
                
                    
//Parse the config content
                    
$this->parseXML$child );
                    
                    
//Reset the current
                    
$this->current "";
                    
                    
//Reset the section
                    
$this->section "";
                break;
                
                case 
'section':
                    
//Create a new section
                    
if( $this->current != "" ) {
                        
$this->config[$this->current][$attr['classpath']] = array();
                        
$this->section $attr['classpath'];
                        
$this->parseXML$child );
                    }
                    
                break;
                
                case 
'include':
                    
//Include a external XML File and parse it
                    
$this->parseXMLsimplexml_load_file"./conf/"$attr['file'] ) );
                break;
                
                case 
'option':
                    
//Set the Config Variable                    
                    
if( $this->current != "" ) {
                        
settype$attr['value'], $attr['type'] );
                        
                        if( 
$this->section != "" ) {
                            
$this->config[$this->current][$this->section][$attr['name']] = $attr['value'];
                            
                            
var_dump$this->config );
                            
var_dump$this );
                            
                            if( 
$count+== $element->count() ) {
                                
$this->section "";
                            }
                        }
                        
                        else 
$this->config[$this->current][$attr['name']] = $attr['value'];
                    }
                    
                    else {
                        
settype$attr['value'], $attr['type'] );
                        
$this->global[$attr['name']] = $attr['value'];    
                    }
                break;
            }
            
            unset( 
$attr );
            
$count++;
        }
    }
    
    private function 
parseAttributesSimpleXMLElement $element ) {
        
$return = array();
        
        foreach( 
$element as $a => $b ) {
            
$return[$a] = (string)$b;
        }
        
        return 
$return;
    }
    
    public function 
getConfig$key$application null ) {
        if( 
$application == null OR !isset( $this->config[$application][$key] ) ) {
            if( isset( 
$this->global[$key] ) ) return $this->global[$key];
            else return 
false;
        }
        
        else {
            if( isset( 
$this->config[$application][$key] ) ) return $this->config[$application][$key];
            else return 
false;
        }
    }
}

?>
Die default.xml:

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<conf>
    <application name="minicms">
        <include file="minicms.xml" />
    </application>
    
    <option name="server-url" value="http://localhost/miniCMS" type="string" />
    <option name="enable-debug" value="true" type="boolean" />
    <option name="enable-stats" value="true" type="boolean" />
</conf>
Die maincms.xml:

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<conf>
    <!-- Requirements for this Application -->
    <!-- Database Section -->
    <section classpath="Connection\MySQL">
        <option name="server" value="localhost:3363" type="string" />
    </section>

    <!-- MySQL Config for this Application -->
    <option name="mysql-database-server" value="localhost:3363" type="string" />
    <option name="mysql-database-user" value="root" type="string" />
    <option name="mysql-database-password" value="18011991" type="string" />
    <option name="mysql-database-name" value="miniCMS" type="string" />
    
    <!-- Cache options for this Application -->
    <option name="cache-handler" value="Core\Cache" type="string" />
</conf>
Im __construct() kommt bei dem var_dump das heraus:

PHP-Code:
object(CoreConfig)[2]
  private 
'config' => 
    array
      
'minicms' => 
        array
          
'Connection\MySQL' => 
            array
              ...
          
'mysql-database-server' => string 'localhost:3363' (length=14)
          
'mysql-database-user' => string 'root' (length=4)
          
'mysql-database-password' => string '18011991' (length=8)
          
'mysql-database-name' => string 'miniCMS' (length=7)
          
'cache-handler' => string 'Core\Cache' (length=10)
  private 
'global' => 
    array
      
'server-url' => string 'http://localhost/miniCMS' (length=24)
      
'enable-debug' => boolean true
      
'enable-stats' => boolean true
  
private 'current' => string '' (length=0)
  private 
'section' => string '' (length=0
Das bei der Funktion parseXML bei dem switch case 'option':

Die $this->config dump:

PHP-Code:
array
  
'minicms' => 
    array
      
'Connection\MySQL' => 
        array
          
'server' => string 'localhost:3363' (length=14
Das darunterliegende $this dump:

PHP-Code:
object(CoreConfig)[2]
  private 
'config' => 
    array
      
'minicms' => 
        array
          
'Connection\MySQL' => 
            array
              ...
  private 
'global' => null
  
private 'current' => string 'minicms' (length=7)
  private 
'section' => string 'Connection\MySQL' (length=16
Ich hexe da nun schon seit fast einer Woche dran rum und ich verstehe es einfach nicht warum das $this->config array diese Sachen nicht ordentlich speichert.

Wenn ich nun die $this->config Variable in eine lokale ändere geht das wenn ich das dumpe. Der $this->config Dump geht ja auch, das wundert mich.

Danke und freundliche Grüße
Fabian Faßbender
Remon ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.09.2010, 12:57  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Ich verstehe die Problembeschreibung nicht. Mit "diese Sachen nicht ordentlich speichert" meinst du, die Daten werden nicht korrekt aus der XML-Datei geparst und im Array abgelegt?

Was wäre denn "korrekt"?
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Alt 14.09.2010, 16:41  
Neuer Benutzer
 
Registriert seit: 17.07.2009
Beiträge: 18
PHP-Kenntnisse:
Fortgeschritten
Remon befindet sich auf einem aufstrebenden Ast
Standard

Das zu erwartende Ergebnis ist:

Bei dem Dump von dem __construct() :
PHP-Code:
object(CoreConfig)[2]
  private 
'config' => 
    array
      
'minicms' => 
        array
          
'Connection\MySQL' => 
            array
              
              
'server' => string 'localhost:3363' (length=14)
  
          
'mysql-database-server' => string 'localhost:3363' (length=14)
          
'mysql-database-user' => string 'root' (length=4)
          
'mysql-database-password' => string '18011991' (length=8)
          
'mysql-database-name' => string 'miniCMS' (length=7)
          
'cache-handler' => string 'Core\Cache' (length=10)
  private 
'global' => 
    array
      
'server-url' => string 'http://localhost/miniCMS' (length=24)
      
'enable-debug' => boolean true
      
'enable-stats' => boolean true
  
private 'current' => string '' (length=0)
  private 
'section' => string '' (length=0
Wenn der Case 'option' in parseXML auftritt und $this->section und $this->current nicht leer sind soll der $this->config array um einen Eintrag erweitert werden. Dies tut er aber nicht sonst währe die Ausgabe wie oben.

Geändert von Remon (14.09.2010 um 16:53 Uhr). Grund: sry falscher dump
Remon ist offline   Mit Zitat antworten
Alt 14.09.2010, 17:30  
Neuer Benutzer
 
Registriert seit: 17.07.2009
Beiträge: 18
PHP-Kenntnisse:
Fortgeschritten
Remon befindet sich auf einem aufstrebenden Ast
Standard

Sorry wegen Doppelpost aber ich habe mal mein XAMPP auf die 1.7.4 Beta 2 geupdatet ( mit PHP 5.3.3 ) und nun geht alles wie erwartet
Remon ist offline   Mit Zitat antworten
Alt 15.09.2010, 15:27  
Erfahrener Benutzer
 
Benutzerbild von PhillKill12
 
Registriert seit: 26.10.2008
Beiträge: 387
PHP-Kenntnisse:
Fortgeschritten
PhillKill12 befindet sich auf einem aufstrebenden Ast
PhillKill12 eine Nachricht über MSN schicken
Standard

dann kan ich dir auch sagen,m wo des problem war, weas meiner ansicht nach gar kein problem war:
Zitat:
array ...
weil du bei deiner alten version iein addon auf appache installiert hast, das dei var_dump-ausgabe von array bzw. objekten nur bis zu einer bestimmten ebene zulässt ...
bei mir ist das der xdebug ...

ich kann dir nur sagen dass die "..." deine weiteren elemente waren, die du gesucht hast !!
__________________
PHP-Code:
if ( $humans >= ) {
   
war ();

PhillKill12 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Zip Archive mit PHP erstellen - Kein Fehler, aber ZIP Archiv ist nicht da robat PHP Tipps 2010 34 09.03.2011 20:17
Funktion rename() auf USB-Festplatten bringt Fehler Wing PHP Tipps 2010 13 16.07.2010 23:00
MySQL: Fehler 10046 keine Datenbank ausgewählt aschunk Datenbanken 5 22.04.2010 12:27
[Erledigt] Syntax Error - Wo ist der Fehler? Extremefall PHP Tipps 2009 5 14.12.2009 17:46
[Erledigt] vista, windows update Fehler 80070422 Screeze Off-Topic Diskussionen 3 23.09.2009 18:24
[Erledigt] Fehler bei Array ausgabe newWorldOrder PHP Tipps 2009 2 23.02.2009 17:29
Include fehler abfangen? fadass PHP Tipps 2005-2 16 23.12.2008 13:07
Frage: Suche Fehler in diesem Script... PHP Tipps 2005-2 14 25.10.2005 19:24
[Erledigt] [phpmailer] - SMTP Fehler: Die folgenden Empfänger sind ... PHP Tipps 2005-2 1 05.10.2005 15:19
[Erledigt] Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
Blöder MySQL Fehler PHP Tipps 2005 3 15.05.2005 03:14
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
Wo liegt der fehler?? PHP-Fortgeschrittene 5 22.12.2004 09:54
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
configdump windows 2008, password dump, php simplexml_load_file fehler abfangen, attr_classpath, $this->conf aus anderen klassen, xampp 1.7.4 beta bug, children, user a

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum