php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-09-2005, 17:14
timjanz
 Newbie
Links : Onlinestatus : timjanz ist offline
Registriert seit: Jan 2004
Ort: Hamburg
Beiträge: 6
timjanz ist zur Zeit noch ein unbeschriebenes Blatt
Question [OOP] Referenz auf Instanz einer übergeordneten Klasse

Moin!

Ich hab eine Klasse, in welcher Instanzen der selben Klasse erzeugt werden, also Rekursiv. Diese Sub-Instanzen können wieder mehrere Sub-Instanzen haben, und so weiter, sodass ich eine Klassen-Baumstruktur erhalte.
Nun ist es nötig, dass ich aus einer Sub-Instanz eine Variable in der übergeordneten Instanz verändern kann. Dazu hab ich in der Klasse eine Variable Eingefügt, in die beim Erstellen der Instanz &$this (Also die Referenz) der erstellenden Instanz gespeichert wird. Ändere ich nun die Variable über die Referenz, so ändern sich die Werte in der übergeordneten Instanz nicht.

Wie kann ich also eine Variable in einem übergeordneten Objekt ändern, ohne auf das übergeordnete Objekt von aussen zuzugreifen (Ich habe also nicht die Möglichkeit, die Variable mithilfe einer Methode aus der Sub-Klasse zu "ziehen")?

Ist warscheinlich etwas schwer zu verstehen, aber es gibt ja Leute hier, die die Kompliziertesten Texte entschlüsseln können. Danke schonmal an jene, und alle, die versuchen das zu Verstehen, und zu Helfen. Hier noch mal ein Code, der das Problem beschreibt. Er ist nicht der Originalcode, desshalb lässt sich kein Sinn erkennen, er ist jedoch wesentlich kürzer, übersichtlicher und leichter zu Verstehen.

PHP-Code:
class class1 {
  var 
$subclass  NULL;
  var 
$variable  'alter Wert';
  var 
$parentcls true;
  var 
$parentref NULL;

  function 
class1 ($parentcls true$parentref NULL) {
    
$this -> parentcls $parentcls;
    if (!
$this -> parentcls)
      
$this -> parentref $parentref;
  }

  function 
create_subclass () {
    
# Erstellen der Sub-Klasse mit Referenz-Parameter zur eigenen Instanz:
    
$this -> subclass = new class1 (false, &$this);
  }
  
  function 
set_var ($var) {
    
$this->variable $var;
    if (!
$this -> parentcls)
      
# Variablenwert auch in der Elternklasse zuweisen:
      
$this -> parentref -> variable $var;
  }
  
  function 
echo_var () {
    echo 
$this -> variable '<br>';
  }
}

$cls = new class1;
$cls -> create_subclass ();
$cls -> subclass -> set_var ('neuer Wert');
$cls -> subclass -> echo_var ();
$cls -> echo_var ();

# Ergebniss:
#
# neuer Wert
# alter Wert
#
# Soll-Ergebniss:
#
# neuer Wert
# neuer Wert 
Mit Zitat antworten
  #2 (permalink)  
Alt 25-09-2005, 17:25
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so wie ich das verstanden habe, sind die tatsächlichen ergebnisse durchaus nachvollziehbar, denn durch die übergabe des $this als referenz führt dazu, dass sowohl $cls als auch $cls->subclass auf das gleiche objekt verweisen.

wenn du $this kopieren lässt, wird es zwei objekte geben (wobei das eine eine eigenschaft des anderen sein würde), die unterschiedliche eigenschaften haben können.
Mit Zitat antworten
  #3 (permalink)  
Alt 25-09-2005, 17:39
timjanz
 Newbie
Links : Onlinestatus : timjanz ist offline
Registriert seit: Jan 2004
Ort: Hamburg
Beiträge: 6
timjanz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nein, denn ich weise $cls->subclass ja nicht &$this zu, sondern einer Variable ($parentref) in $cls->subclass... Somit müssten die Variable in $cls->subclass und $cls auf das gleiche Objekt verweisen. Das tun sie aber anscheinend nich!

Und auch, wenn das Ergebniss nachvollziehbar währe, löst das mein Problem leider nicht, weil mir auch keine andere Möglichkeit einfällt.
Mit Zitat antworten
  #4 (permalink)  
Alt 25-09-2005, 18:22
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hast recht.

was ändert sich, wenn du $this nicht als referenz übergibst, sondern als kopie?
Mit Zitat antworten
  #5 (permalink)  
Alt 25-09-2005, 18:30
timjanz
 Newbie
Links : Onlinestatus : timjanz ist offline
Registriert seit: Jan 2004
Ort: Hamburg
Beiträge: 6
timjanz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Ausgabe bleibt gleich. Aber dann ist es auch logisch.
Mit Zitat antworten
  #6 (permalink)  
Alt 25-09-2005, 19:18
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

dann versuch mal im konstruktor die zeile
PHP-Code:
$this -> parentref $parentref
zu
PHP-Code:
$this -> parentref =& $parentref
zu ändern, damit die referenz bei der zuweisung der eigenschaft entsteht.
Mit Zitat antworten
  #7 (permalink)  
Alt 25-09-2005, 19:22
timjanz
 Newbie
Links : Onlinestatus : timjanz ist offline
Registriert seit: Jan 2004
Ort: Hamburg
Beiträge: 6
timjanz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Jo, wenn man beides macht, dann geht es...

also:
PHP-Code:
...
$this -> parentref =& $parentref;
...
$this -> subclass = new class1 (false, &$this);
... 
Vielen Dank!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:18 Uhr.