php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.09.2005, 20:21  
Gast
 
Beiträge: n/a
Standard Klassen und OOP Problem

Hallo erstmal,
Ich bin neu hier und deswegen m�chte ich mich vorab erstmal f�r meine schlechte Rechtschreibung aufgrund vieler Tippfehler entschuldigen.

So zu meinem Problem. Ich m�chte mir ein Grundger�st an Klassen aufbauen. Dazu m�chte ich eine Datenbank, eine Template und eine Funktionsklasse anlegen. Diese Klassen sollen alle T�chterklassen von einer Mutterklasse sein. Dies soll im Prinzip am Ende so aussehen:

Basisklasse
- Datenbank
- Template
- Funktion

Nun das Problem. Ich schaffe es einfach nicht, das ich zB die Datenbankklasse in der Templateklasse etc verwenden kann.

So sieht das aktuell bei mir aus (Content etc entfernt).
PHP-Code:
<?php

class baseClass {

        public 
$tpl;
        public 
$db;
        public 
$func;
        
        public function 
base() {
            
$this->tpl = new templateClass();
            
$this->db = new databaseClass();
            
$this->func = new functionclass();
        }
    } 
    
    class 
databaseClass extends baseClass {

        public function 
db() {
            
# Content
        

    
    }
    
    class 
templateClass extends baseClass  {
        
        public function 
tpl() {
            
# Content
        

    }
    
    class 
functionclass extends baseClass  {
        
        public function 
func() {
            
# Content
        

    }
    
    
$main = new baseclass();
    
$main->base()
    
    
?>
Rufe ich jetzt zB �ber $main->tpl->tpl(); die Funktion tpl ansteuern m�chte geht das, wenn ich jedoch in der klasse functionClass �ber $this->tpl->tpl(); die Funktion aufrufen m�chte, verweigert das Script die Arbeit, und zwar mit der Begr�ndung Fatal error: Call to a member function bla on a non-object in directory on line xyz, den Dienst. Es gibt doch aber sicherlich eine L�sung, die Klassen in den Anderen verf�gbar zu machen.

Danke im Vorraus
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.09.2005, 21:36  
Gast
 
Beiträge: n/a
Standard

Ich verstehe zwar nicht, was Du damit erreichen möchtest (sehr gewöhnungsbedürftiger Klassenaufbau), aber folgendes kann ich dir sagen:

Beim Instanzieren von 'functionclass' werden keine Unterobjekte angelegt, da die Kindklassen zwar Methoden und Eigenschaften erben, aber keinerlei werte, die zur Laufzeit von Obejekten der Elternklassen erzeugt werden.
Konkret: die Methode functionclass::base() wird nie aufgerufen und damit werden auch keine Objekte innerhalb dieser Klasse instanzieert.

Jetzt gäbe es die Möglichkeit, die Methode base() zu überarbeiten:

PHP-Code:
public function base() {
         
$this->tpl = new templateClass();
         
$this->db = new databaseClass();
         
$this->func = new functionclass();
         
$this->func->base();

Oder den Codeblock aus base() in den Konstruktor zu legen. Das Ergebnis wäre aber eine unendliche Baumstruktur (sprich, php würde aus dem Konstruktor nicht zurückkommen, da hier neue Objekte erzeugt würden, die im Konstruktor neue Objekte erzeugen, die im Konstruktor neue Objekte erzeugen usw.
  Mit Zitat antworten
Alt 08.09.2005, 00:30  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Warum sollte denn auch ein Datenbankobjekt auf ein Templateobjekt zugreifen? Oder ein Funktionen-Objekt (was auch immer das sein mag) auf eine der beiden anderen?

Das sieht nach einem ziemlich vermurksten Entwurf aus...

Wenn du in einem Objekt auf ein anderes zugreifen möchtest, kannst du dieses dem Objekt übergeben:
PHP-Code:
<?php
$DataBase 
= new DataBase($sHost, ...);
$MyDAO = new MyDAO($DataBase);

// oder

$Registry = new Registry;
$Request = new Request;
$Registry->setRequest($Request);
?>
Im ersten Fall kannst du dass dann natürlich auch vom Konstruktor einer Basisklasse erledigen lassen:
PHP-Code:
<?php
abstract class DAO
{
    protected 
$DataBase;

    public function 
__construct($DataBase)
    {
        
$this->DataBase $DataBase;
    }
}

class 
MyDAO
{
    public function 
__construct($DataBase)
    {
        
parent::__construct($DataBase);
    }
}
?>
Du kannst dir natürlich auch über eine Factory ein Objekt zukommen lassen, die du dann über eine statische Methode oder eine Funktion ansprichst. Ist aber mit Vorsicht zu genießen, denke ich - zumindest bei den drei genannten Klassen!

Basti
Basti ist offline   Mit Zitat antworten
Alt 08.09.2005, 10:37  
Gast
 
Beiträge: n/a
Standard

Guten Morgen erstmal,
Ich danke euch beiden für eure kleine hilfestelleung, hat mir ein paar denkansätze gegeben.

Danke

dompy
  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
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
beginn mit oop und klassen. aller anfang ist schwer... :( Promaetheus PHP Tipps 2006 1 22.06.2006 18:10
Problem mit Klassen Freeaak PHP Tipps 2006 16 15.06.2006 13:43
Sessions an includete Klassen übergeben Dr_Enquinox PHP Tipps 2006 4 29.04.2006 10:25
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
mit html klassen definieren und in php ausgeben PHP-Fortgeschrittene 4 16.01.2006 10:31
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 in Klassen verwenden PHP Tipps 2005 5 23.02.2005 14:08
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
oop php abstract class, php oop template, baumstruktur oop, smarty zugriff auf klassenmethoden, php oop problem, db zugriff in funktion, php oop template class, oop php, php baumstruktur oop, php oop möglichkeiten klasse funktion aufzurufen, oop php registry database, template in oop, db oop php, php oop ein objekt einer anderen klasse aufrufen, php oop externe funktionen, php oop database, oop klassen, oop problem, php oop aufruf public methode anderer klasse, smarty oop auf object function zugreifen

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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.