php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.12.2008, 13:43  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Dann fehlt da aber noch irgendwo ein static.
Egal, wir können rätseln, solange wir wollen. Oder warten einfach bis
Zitat:
aufrufenden Klasse A
nochmal richtig beschrieben wird
David ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.12.2008, 14:30  
Neuer Benutzer
 
Registriert seit: 05.02.2008
Beiträge: 5
72dpi befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen und danke für Eure Diskussion

Mein Beispiel hatte ich nur so runtergetippt. Wenn da also noch Syntaxfehler drin waren, hoffe ich, das die nicht zur Verwirrung beigetragen haben!?

Bei der Initialisierung von $newB = new B; erhält das Objekt $newB neben den eigenen Methoden und Eigenschaften auch die von Klasse A (B extends A) durch die Vererbung, inkl. einer eigenen var $myVar, die innerhalb des neuen Objektes natürlich leer ist, weil nicht gesetzt. $myVar wurde aber in der "aufrufenden/Eltern-Klasse" A (die $newB = new B(); initialisiert hat) vorher gesetzt und an genau die will/muss ich drann.
$this und parent:: gehen auf die vererbten Methoden und Eigenschaften des Objektes, aber wohl nicht an die aufrufende Klasse. Ich weiß nicht, ob A:: ein anderes Ergebnis bringt, oder ob das nur eine andere Schreibweise von parent:: ist!?

Das heißt für meinen Fall werde ich dann wohl den Wert an die Klasse manuell weitergeben.

Danke & Gruß,
72
72dpi ist offline  
Alt 12.12.2008, 14:34  
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

Zitat:
$this und parent:: gehen auf die vererbten Methoden und Eigenschaften des Objektes, aber wohl nicht an die aufrufende Klasse. Ich weiß nicht, ob A:: ein anderes Ergebnis bringt, oder ob das nur eine andere Schreibweise von parent:: ist!?
Doch. Solange Du die in B nicht neu setzt (überschreibst). Siehe #6 unten und #8 unten.

Maßgeblich ist auch die Sichtbarkeit der Variable:

PHP-Code:
<?php

Class {
  protected 
$myVar;
 
  function 
() {
    
$this->myVar "4711";
  }
 
  protected function 
getMyVar() {
    return 
$this->myVar;
  }
}
 
Class 
extends {
  protected 
$myVar;

  function 
() {
    
parent::();
    
$this->myVar "0815";
    echo 
A::getMyVar();
    echo 
$this->myVar;
  }
}
 
$a = new B//08150815
Änderst Du die Sichtbarkeit von $myVar auf private ergibt sich dagegen: 47110815
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

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

Geändert von nikosch (12.12.2008 um 14:42 Uhr).
nikosch ist offline  
Alt 12.12.2008, 14:36  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Ich glaube "aufrufende Klasse" ist einfach falsch.
Du hast ein Objekt a der Klasse A. Dieses Objekt a hat eine Eigenschaft myval mit dem Wert 4711. Jetzt erstellst Du ein neues Objekt newB der Klasse B (von mir aus extends A). Und willst die Werte des Objekts a im Objekt newB verwenden. Richtig?
David ist offline  
Alt 12.12.2008, 16:14  
Neuer Benutzer
 
Registriert seit: 05.02.2008
Beiträge: 5
72dpi befindet sich auf einem aufstrebenden Ast
Standard

@David
Soweit richtig! Objekt B wird aber in Objekt A erstellt, deswegen habe ich von "aufrufende Klasse" gesprochen, was wohl eher "unrichtig" ist :P
Im neuen B sollen die bereits gesetzten Werte aus A verwendet werden.

@nikosch
Welche Sichtbarkeit hat denn ein var $myVar? Public, protected oder einen anderen, bzw. garkeinen(?) Zustand?
In Deinem Beispiel setzt Du ja ein Objekt B, welches von A abgeleitet ist. Im Konstruktor von B rufst Du den Konstruktor von der geerbten Klasse A auf, wo myVar aus A gesetzt wird. Anschließend setzt Du myVar aus B und gibst die Werte aus. Die Ergebnisse mit protected und private sind nachvollziehbar, aber das Beispiel beschreibt nicht mein Problem

Danke & Gruß,
72
72dpi ist offline  
Alt 12.12.2008, 16:46  
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

Zitat:
Die Ergebnisse mit protected und private sind nachvollziehbar, aber das Beispiel beschreibt nicht mein Problem
Doch natürlich. Solange die Zugriffsmethoden aufrufbar sind ist der Aufrufkontext doch egal.

mit var deklarierte Variablen haben public Status.
__________________
--
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, 17:02  
Neuer Benutzer
 
Registriert seit: 05.02.2008
Beiträge: 5
72dpi befindet sich auf einem aufstrebenden Ast
Standard

Wenn dem so ist, dann probiere ich es mit einer expliziten private Deklaration von myVar in A aus. Dadurch müsste der Zugriff dann ja klappen
Zitat:
Änderst Du die Sichtbarkeit von $myVar auf private ergibt sich dagegen: 47110815
Ich hatte bisher gedacht, dass es sehr wohl auf den Aufrufkontext ankommt, da es in meinem Fall die uninitialisierte vererbte Klasse A (über extends A) gibt und die initialisierte ominöse "aufrufende Klasse" A, von der das Objekt erstellt wird und die nicht gleich der vererbten Klasse ist.

Werde das heute Abend genauer testen können!
Danke Euch für die Hilfe!

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

Wie gesagt: Der Ausdruck "aufrufende Klasse" ist falsch.
Das hat eventuell Bedeutung in C++ mit friend class Definitionen. Aber selbst das hat mit dem hier geschilderten Problem nichts zu tun. Alles, was Du hier durch B extends A "gewinnst", ist, dass Instanzen/Objekte von B auf protected Elemente von Objekten von A zugreifen können. Dafür brauchst Du aber irgendeine Referenz auf das Objekt von A. Und die bekommst Du nicht durch bloßen Aufruf. Der class stack hat nichts mit der Vererbungshierarchie zu tun.
David 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
parent php class, php innerhalb einer abgeleiteten klasse auf parent objekt zugreifen

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