php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.12.2008, 23:19  
Neuer Benutzer
 
Registriert seit: 05.02.2008
Beiträge: 5
72dpi befindet sich auf einem aufstrebenden Ast
Standard Verwendung von $this und parent in abgeleiteten Klassen

Hallo zusammen,

in einer Klasse A wird ein neues Objekt der Klasse B erstellt. Klasse B ist von A abgeleitet. Innerhalb der Instanz von B möchte ich jetzt auf einen Wert aus der aufrufenden Klasse A zugreifen. Mit $this->MyVar oder über parent::getMyVar(); bekomme ich keinen Wert. Gehe ich mit $this-> und parent:: denn auf die Elternklasse oder auf die aufrufende Klasse zurück? Die Elternklasse wäre ja nicht initialisiert. Der Wert ist ja in der aufrufenden, initialisierten Klasse ... oder verwirre ich mich grade selber?

Beispiel:
PHP-Code:
Class {
  var 
$myVar;
 
  function 
{
    
$myVar "4711";
  }
 
  function 
initB() {
    
$newB = new B;            // neues B Objekt
    
$newB->EchoMyVar();
  }
 
  function 
getMyVar() {
    return 
$this->myVar;
  }
}
 
Class 
extends {
  function 
EchoMyVar() {
    echo 
$this->myVar;             // gibt bei mir nix oder
    
echo parent::getMyVar();     // gibt auch nix
  
}
}
 
$a = new A;
$a->initB(); 
Wäre toll, wenn mir das nochmal jemand erklären könnte, bzw. meine Annahme bestätigen oder widerlegen kann.

Danke & Gruß,
72

Geändert von 72dpi (12.12.2008 um 08:26 Uhr).
72dpi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.12.2008, 00:12  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

parent:: direkt und $this indirekt beziehen sich immer auf die Vererbung, nicht auf den callstack.
David ist offline  
Alt 12.12.2008, 00:26  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Bitte Titel ändern!
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline  
Alt 12.12.2008, 08:28  
Neuer Benutzer
 
Registriert seit: 05.02.2008
Beiträge: 5
72dpi befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Antwort, David.

Gibt es denn eine Lösung für das Problem oder muss ich solche Werte bei der Objekterstellung an das neue Objekt manuell übergeben?

Gruß,
72
72dpi ist offline  
Alt 12.12.2008, 11:28  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Letzteres ist eine mögliche Lösung
David ist offline  
Alt 12.12.2008, 11:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Na da habt Ihr aber nicht richtig geguckt
Zitat:
PHP-Code:
Class {
  var 
$myVar;
 
  function 
{
    
$myVar "4711";
  }
 
  function 
initB() {
    
$newB = new B;            // neues B Objekt
    
$newB->EchoMyVar();
  }
 
  function 
getMyVar() {
    return 
$this->myVar;
  }
}
 
Class 
extends {
  function 
EchoMyVar() {
    echo 
$this->myVar;             // gibt bei mir nix oder
    
echo parent::getMyVar();     // gibt auch nix
  
}
}
 
$a = new A;
$a->initB(); 
Die Methode in B funktioniert schon (auf beiden Wegen), nur hast Du in A () eine lokale Variable, kein Objektmember gesetzt.
Und da A () ohnehin einen Syntaxfehler enthält:

PHP-Code:
  function () {
    
$this->myVar "4711";
  } 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 12.12.2008, 13:24  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Ja, da ist mindestens noch ein syntax error drin. Trotzdem kann $newB = new B; nicht auf den Wert des Objekts $a über parent:: o.ä. zugreifen. Es kann auf seinen eigenen von der Klasse A vererbten Wert zugreifen oder auf ein Objekt vom Typ A, das irgendwie an $newB übergeben wird. Nur weil $a $newB erzeugt oder eine Methode davon aufruft, besteht keine direkte Verbindung $newB->$a, nur class B -> class A.

PHP-Code:
<?php
class {
  var 
$myVar;
 
  function 
A($val) {
    
$this->myVar $val;
  }
 
  function 
initB() {
    
$newB = new B(4711);
    echo 
'$a->val:'$this->myVar;
    
$newB->EchoMyVar();
  }
 
  function 
getMyVar() {
    return 
$this->myVar;
  }
}
 
Class 
extends {
  function 
EchoMyVar() {
    echo 
'  newB this:'$this->myVar;
    echo 
'  newB parent:'parent::getMyVar();
  }
}
 
$a = new A('0815');
$a->initB();
Zitat:
$a->val:0815 newB this:4711 newB parent:4711

Geändert von David (12.12.2008 um 13:29 Uhr).
David ist offline  
Alt 12.12.2008, 13:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Bis auf diese
Zitat:
extends A
David, Du baust ab.

Zitat:
Zitat von localhost
47114711
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 12.12.2008, 13:34  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Ne, wir reden nur aneinander vorbei
siehe edit in #7
und
Zitat:
Zitat von 72dpi
Innerhalb der Instanz von B möchte ich jetzt auf einen Wert aus der aufrufenden Klasse A zugreifen.
in #1
David ist offline  
Alt 12.12.2008, 13:38  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, ist ne Frage der Interpretation, ich habe die Frage so verstanden, wie sein Code darunter darstellt. Klar, wenn ich die Variable in B initialisiere, dann wird sie die von A überschreiben.

Aber notfalls geht ja immer noch auch:
PHP-Code:
A::getMyVar(); 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


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
Dringende Frage odde PHP Tipps 2008 5 28.10.2008 19:03
Variablen in Klassen resetet oceanblue PHP Tipps 2008 5 15.10.2008 14:30
Frage zu LDAP Frage (Active Directory) FRAD PHP Tipps 2008 0 01.10.2008 16:11
Tool um (Spiel)Klassen zu erzeugen Martin13 PHP-Fortgeschrittene 6 05.09.2007 02:25
Klassen sinnvoll nutzen, Grundlegendes nikosch PHP-Fortgeschrittene 1 30.09.2006 22:08
[Erledigt] PHP 4 - Klassen? patr1k PHP Tipps 2005 10 18.11.2005 10:48
Klassen und OOP Problem PHP-Fortgeschrittene 3 08.09.2005 10:37
klassen und methoden anderer klassen in methoden.... PHP Tipps 2005 17 25.05.2005 09:46
Klassen PHP Tipps 2005 5 09.04.2005 18:51
Klassen Frage!!! PHP-Fortgeschrittene 20 04.03.2005 22:24
Klassen in Klassen verwenden PHP Tipps 2005 5 23.02.2005 14:08
klassen: ganz dumme frage PHP Tipps 2005 8 23.01.2005 13:32
[Erledigt] Frage zur Funkrionen? PHP Tipps 2004-2 10 01.12.2004 09:42
Klassen?! PHP Tipps 2004 14 03.06.2004 17:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php this in abgeleiteten klassen, parent php class, php werte aus parent klasse, klasse von this, klassen parent, http://www.php.de/php-tipps-2008/49748-verwendung-von-und-parent-abgeleiteten-klassen.html

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