php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.01.2012, 12:50  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Da die Eigenschaft read-only sein soll habe ich keine andere Wahl. Ansonsten könnte der Wert auch auf "null" o.A. gesetzt werden was Probleme bereitet.
Ich würde glatt das Gegenteil behaupten. Setze die Properties auf private und implementiere __set() und __get(). Ob das nun sauber ist oder nicht, es funktioniert .
Trainmaster ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.01.2012, 13:02  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.631
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Für die Nachwelt:

Da der Konstruktor von SimpleXMLElement als final deklariert ist, lässt sich dieser leider nicht überschreiben womit ich auch mit fabs Lösung, das Basisobjekt per Komposition anstatt durch Vererbung an das jeweile Objekt zu binden hier nicht weiter komme.

Wenn ich aber die hierarchische Struktur des XML Baumes mit meinen Objekten nachbilden will, um dsentkers Vorschlag umzusetzen, müsste ich parallel zu dem SimpleXML Baum einen eigenen führen und bei Modifikation pflegen.

Ich habe es nun mit einer Kombination aus allen gelöst:
PHP-Code:
<?php
namespace config
;

class 
XMLElement {

    private 
$xmlElement null;
    
    protected 
$baseObject null;
    
    private function 
replaceXMLElements($result) {
        if (
$result instanceof SimpleXMLElement) {
            return new 
XMLElement($result);
        } else if (
is_array($result)) {
            
$newResult = array();
            foreach(
$result AS $r) {
                if (
$r instanceof SimpleXMLElement) {
                    
$newResult[] = new XMLElement($r);
                } else {
                    
$newResult[] = $r;
                }
            }
            
            return 
$newResult;
        }
        
        return 
$result;
    }
    
    public function 
__set($property$value) {
        
$this->xmlElement->$property $value;
    }
    
    public function 
__get($property) {
        
$result $this->xmlElement->$property;
        return 
$this->replaceXMLElements($result);
    }
    
    public function 
__call($method$args) {
        
$result call_user_func_array(array($this->xmlElement$method), $args);
        return 
$this->replaceXMLElements($result);
    }
    
    public function 
__construct(SimpleXMLElement $xmlElement) {
        
$this->baseObject = new coreBaseObject();
        
$this->xmlElement $xmlElement;
    }
    

}
Dadurch sollten alle Anforderungen erfüllt sein.

- Keine Vererbung
- Zugriff ohne explizit implementierten Getter
- Auslieferung der SimpleXMLElement innerhalb meines Containers
- Zugriff auf das Basisobjekt
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 24.01.2012, 13:16  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Da der Konstruktor von SimpleXMLElement als final deklariert ist, lässt sich dieser leider nicht überschreiben womit ich auch mit fabs Lösung, das Basisobjekt per Komposition anstatt durch Vererbung an das jeweile Objekt zu binden hier nicht weiter komme.
Nicht gleich aufgeben
PHP-Code:
class XMLElement extends SimpleXMLElement implements HasMeta
{
  protected 
$_meta null;
  public function 
getMeta()
  {
    if (
$this->_meta === null) {
      
$this->_meta = new MetaObject($this);
    }
    return 
$this->_meta;
  }

fab 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
Fehlende Klasse (SOAP) bei Freehoster Atikos PHP Einsteiger 2 26.02.2011 10:18
[Erledigt] Workaround für fehlendes PDO::MYSQL_ATTR_FOUND_ROWS bzw. Bug in DBO::rowCo Dawn Datenbanken 9 31.01.2011 11:38
[Erledigt] Konstruktoraufruf bei Mehrfachvererbung hts JavaScript, Ajax und mehr 5 09.01.2011 17:28
Fehlende Werte im Index füllen akogler Datenbanken 6 29.12.2010 20:49
MySQL, fehlende Datensätze!? The Virusman PHP Einsteiger 5 14.12.2010 14:44
[Erledigt] Fehlende Umlaute im HTML phreund PHP-Fortgeschrittene 4 10.12.2010 14:28
[Erledigt] Fehlende Rechte auf /tmp -&gt; Probleme mit Sessions Gemouen PHP Tipps 2009 3 28.10.2009 21:59
Padding IE Table workaround oder css-hack? Circushund HTML, Usability und Barrierefreiheit 10 16.05.2009 19:17
Abfrage auf fehlende ID in einer Tabelle maeck Datenbanken 2 04.07.2007 19:44
imagefillrectangle mit transparenz workaround? Promaetheus PHP Tipps 2006 2 20.10.2006 04:46
Fehlende Einträge in Tabelle finden Cyberbob_at_tot Datenbanken 17 29.06.2006 15:39
fehlende MYSQL-extension für PHPMyaAdmin FatherDeath Datenbanken 3 20.05.2006 15:56
Fehlende MySQL-Clients? Datenbanken 1 29.07.2005 12:46
Fehlende Zahlen suchen und Reihung ändern.... MortakArtos PHP-Fortgeschrittene 5 26.09.2004 12:21
[Erledigt] fehlende Zeilenumbrüche in Text E-mail (php / mysql) Datenbanken 6 30.08.2004 13:11

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php instanceof vererbung

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:36 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