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 31-05-2009, 12:56
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard OOP - Problem mit Vererbung

Hallo zusammen..

Ich möchte mehrere Klassen miteinander vererben. Da man in PHP einer Klasse nur eine Klasse vererben kann hab ich eine 'Grundklasse' gemacht. Alle Klassen vererbe ich nun diese 'Grundklasse'.

Mein Skript läuft nun folgendermassen ab:
Die Grundklasse wird gestartet. Mit einer Funktion werden 4 Variabeln der Grundklasse beschrieben.
Ich Starte eine andere Klasse (welche eine Vererbung der Grundklasse hat) Und will in einer Funktion auf die Variabeln, die davor in der Grundklasse gespeichert wurden zugreifen. Aber var_dump() gibt mir ein NULL.

In der Grundklasse werden die Variabeln so festgelegt und beschrieben:
PHP-Code:
public $S_MYSQL_HOST;
public 
$S_MYSQL_USER;
public 
$S_MYSQL_PASSWORD;
public 
$S_MYSQL_DB;
// ...
function LoadConfigFile($file) {
    if(!
file_exists($this->S_CONFIG_PATH.$file)) return false;
    include(
$this->S_CONFIG_PATH.$file);
    echo 
$this->S_MYSQL_HOST $mysql_host;
    echo 
$this->S_MYSQL_USER $mysql_user;
    echo 
$this->S_MYSQL_PASSWORD $mysql_password;
    echo 
$this->S_MYSQL_DB $mysql_db;

Die echo Befehle Dienen nur zu Testzwecken! Und diese Echo's geben auch den richtigen Inhalt aus!

In der Anderen Klasse greife ich so auf die Variabeln von der Grundklasse zu:
PHP-Code:
function Start() {
    
var_dump($this->S_MYSQL_DB);
    if (
$this->connect mysql_connect($this->S_MYSQL_HOST$this->S_MYSQL_USER$this->S_MYSQL_PASSWORD)) {
        return 
true;
    } else return 
false;
        
/**
         * Error: Verbindung konnte nicht hergestellt werden.
         */

Auch hier dient var_dump() nur zu Testzwecken. Allerdings wird hier NULL ausgegeben!

Meine Frage: Wiso wird NULL ausgegeben, wenn ich die Variabeln doch vorher gespeichert habe?
Mit Zitat antworten
  #2 (permalink)  
Alt 31-05-2009, 13:05
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Rufst du in der zweiten Klassen denn überhaupt erstmal diese Funktion auf, in der die Variablen beschrieben werden?!

Ist vielleicht ne dämliche Frage, aber oft sinds ja die einfachen Sachen die man nicht selbst sieht ;D

Ansonsten: Wird nur diese Variable als NULL angezeigt oder auch alle anderes?
Mit Zitat antworten
  #3 (permalink)  
Alt 31-05-2009, 13:16
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also mein Skript, wo ich die Klassen aufrufe sieht ca. so aus:
PHP-Code:
error_reporting(E_ALL);
require_once(
'system/class.system.php');
$sys = new System;     // System Starten
$sys->LoadConfigFile('config.php');     // MySQL Config laden
$sys->LoadSystemDrivers(); // Systemtreiber laden

unset($sys);     // System beenden 
LoadConfigFile()
Hier wird die Konfigurationsdatei geladen und die Variabeln werden zugeordet.

LoadSystemDrivers()
Hier werden die restlichen Klassen geladen und gestartet.

Alle Variabeln, die ich in der Funktion LoadConfigFile() gesetzt habe, beinhalten dort die NULL.
Die anderen Variabeln, welche ich schon bei der deklaration gesetzt habe haben den Korekten wert und nicht NULL.

Geändert von andygyr (31-05-2009 um 13:18 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 31-05-2009, 13:50
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

ich hoffe, du hast extends nicht vergessen. und warum killst du das objekt mit unset($sys);? dafür gibt __destruct.

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 31-05-2009, 14:09
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Extends ist bei der Klasse dran. Also 'extends Grundklasse' ..

__destruct() wird doch per unset() aufgerufen? Oder hab ich mich da flasch informiert?
Mit Zitat antworten
  #6 (permalink)  
Alt 31-05-2009, 14:15
Hopka
 PHP Expert
Links : Onlinestatus : Hopka ist offline
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.172
Hopka ist zur Zeit noch ein unbeschriebenes Blatt
Hopka eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von andygyr Beitrag anzeigen
Mein Skript läuft nun folgendermassen ab:
Die Grundklasse wird gestartet. Mit einer Funktion werden 4 Variabeln der Grundklasse beschrieben.
Ich Starte eine andere Klasse (welche eine Vererbung der Grundklasse hat) Und will in einer Funktion auf die Variabeln, die davor in der Grundklasse gespeichert wurden zugreifen. Aber var_dump() gibt mir ein NULL.
Das klingt jetzt nicht unbedingt so als ob du Objektorientierung verstanden hättest.

Man "startet" keine Klassen und man speichert auch keine Variablen in Klassen.

Man erzeugt Objekte einer Klasse. Und wenn du in einem solchen Objekt dann Variablen befüllst und anschließend ein Objekt einer Unterklasse erzeugst, dann hat das natürlich keine Ahnung von dem anderen Objekt.
__________________
hopka.net!
Mit Zitat antworten
  #7 (permalink)  
Alt 31-05-2009, 14:36
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn man jetzt mal nur den Ablauf anschaut würde das ca. so aussehen:
PHP-Code:
error_reporting(E_ALL);
require_once(
'system/class.system.php');
$sys = new System;     // System Starten
$sys->LoadConfigFile('config.php');     // MySQL Config laden
$sys->LoadSystemDrivers(); // Systemtreiber laden
$myslq = new MySQL();
$mysql->Start(); 
Wobei die Klasse MySQL mit der funktion Start auf die Variabeln der Klasse System zugreift, welche in der Funktion LoadConfigFile gesetzt wurden.
Mit Zitat antworten
  #8 (permalink)  
Alt 31-05-2009, 14:42
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von andygyr Beitrag anzeigen
Wenn man jetzt mal nur den Ablauf anschaut würde das ca. so aussehen:
PHP-Code:
error_reporting(E_ALL);
require_once(
'system/class.system.php');
$sys = new System;     // System Starten
$sys->LoadConfigFile('config.php');     // MySQL Config laden
$sys->LoadSystemDrivers(); // Systemtreiber laden
$myslq = new MySQL();
$mysql->Start(); 
Wobei die Klasse MySQL mit der funktion Start auf die Variabeln der Klasse System zugreift, welche in der Funktion LoadConfigFile gesetzt wurden.
Dann musst du aber $sys an das Objekt $mysql übergeben.

Warum verwendest du übrigens nicht die bereits fertig mysqli-Klasse statt dem veralteten mysql-Mist?
Mit Zitat antworten
  #9 (permalink)  
Alt 31-05-2009, 14:52
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Gibts keine andere möglichkeit, wie ich von einer Klasse die Variabeln der anderen Klasse nutzen kann?

Die MySQL Klasse die ich verwende habe ich selbst geschrieben..
Mit Zitat antworten
  #10 (permalink)  
Alt 31-05-2009, 15:03
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Für das Bereitstellen von Objekten gibt es verschiedene Design Pattern, zum Beispiel Singleton oder Registry. Oder du übergibst dem Mysql-Objekt eine Instanz der System-Klasse. Wie du es auch machst, so wie jetzt geht es auf jeden Fall nicht
Mit Zitat antworten
  #11 (permalink)  
Alt 31-05-2009, 15:10
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Gibts keine andere möglichkeit, wie ich von einer Klasse die Variabeln der anderen Klasse nutzen kann?
eine möglich sähe z.b. so aus:
PHP-Code:
class A
{
  protected 
$blubb;
  protected function 
__construct ($bla)
  {
    
$this -> blubb $bla;
  }
}

class 
extends A
{
  public function 
__construct ($bla)
  {
    
parent::__construct ($bla);
  }
  
  public function 
getBla()
  {
    return 
$this -> blubb
  }
}

$a = new ('bluber');
echo 
$a -> getBla(); 
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #12 (permalink)  
Alt 31-05-2009, 15:15
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dann kann ich doch mit parent::Vriable auf eine Variable der Übergeordneten Klasse zugreifen!

Danke für den Tipp!
Mit Zitat antworten
  #13 (permalink)  
Alt 31-05-2009, 15:21
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Dann kann ich doch mit parent::Vriable auf eine Variable der Übergeordneten Klasse zugreifen!
nur wenn sie vom typ static ist.
PHP-Code:
class A
{
  protected static 
$blubb;
  protected function 
__construct ($bla)
  {
    
self::$blubb $bla;
  }
}

class 
extends A
{
  public function 
__construct ($bla)
  {
    
parent::__construct ($bla);
  }
  
  public function 
getBla()
  {
    echo 
parent::$blubb
  }
}

$a = new ('bluber');
$a -> getBla(); 
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #14 (permalink)  
Alt 31-05-2009, 15:27
andygyr
 Registrierter Benutzer
Links : Onlinestatus : andygyr ist offline
Registriert seit: Jan 2007
Beiträge: 183
andygyr ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank!

Das mit Static wusste ich, allerdings nicht, dass man sie Variable dann auch in der 'eigenen' Klasse noch mit self:: ansprechen muss. Klappt wunderbar!
Mit Zitat antworten
  #15 (permalink)  
Alt 31-05-2009, 15:41
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

ich würde trotzdem hier nicht mit statischen eigenschaften arbeiten, sondern so:
PHP-Code:
class System
{
  protected 
$S_MYSQL_HOST;
  protected 
$S_MYSQL_USER;
  protected 
$S_MYSQL_PASSWORD;
  protected 
$S_MYSQL_DB
  private   
$file;
  protected function 
__construct($file
  {
    
$this -> file //... usw.
  
}
}

class 
MySql extends System 
{
  public function 
__construct ($file)
  {
    
parent::__construct ($file);
    echo 
$this -> S_MYSQL_USER;
  }
}

$myslq = new MySQL(); 
trotzdem halte ich die vorgehensweise nicht für optimal. imho gehören die db-zugangsdaten ausschließlich in die mysql-klasse. und sollten vom typ private sein.

peter
EDIT:
außerdem solltest du dir mal autoload ansehen
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite

Geändert von Kropff (31-05-2009 um 16:03 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP5] Problem mit der Vererbung von Variablen? fear PHP Developer Forum 2 31-10-2007 13:18
[CSS] z-Index vererbung? besenstil HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 0 02-03-2006 09:40
Problem mit Eigenschaftenübergabe zwischen Klassen (vererbung? ) Breezzer PHP Developer Forum 4 24-12-2005 11:20
OO: Verstrikte Vererbung krabo PHP Developer Forum 9 01-04-2003 15:02
Problem mit klassen vererbung . Face PHP Developer Forum 4 27-06-2002 15:15

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

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
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:15 Uhr.