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 16-12-2009, 20:22
DanyGee
 Registrierter Benutzer
Links : Onlinestatus : DanyGee ist offline
Registriert seit: Feb 2002
Beiträge: 31
DanyGee ist zur Zeit noch ein unbeschriebenes Blatt
Standard OOP auf instanz aus anderer Class zugreifen

hallo

ich habe eine db class die zur datenbank verbindet und mit der ich querys an die db schicken kann, usw.

ich erstelle ein instanz in der header.php

zudem hab ich eine user class, die ich ebenfalls in der header.php aufrufe.

wie kann ich jetz eine db abfrage über die klasse machen?
neue instanz erstellen in klasse?

danke für eure antworten
Mit Zitat antworten
  #2 (permalink)  
Alt 16-12-2009, 20:56
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

PHP-Code:
class DB {...}
class 
User extends DB {...}
// header.php
$obj = new User(); 
Zum Beispiel. Hängt aber von deiner Modellierung ab.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 16-12-2009, 21:48
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Kropff Beitrag anzeigen
PHP-Code:
class DB {...}
class 
User extends DB {...}
// header.php
$obj = new User(); 
Zum Beispiel. Hängt aber von deiner Modellierung ab.
Was hat der User mit der Datenbank zu tun? Von so einer Ableitung ist einfach nur abzuraten.
Mit Zitat antworten
  #4 (permalink)  
Alt 16-12-2009, 21:56
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

Mir ging es nur ums grundsätzliche Prinzip. Wenn jede Klasse Abfragen an eine Datenbank stellt, so wäre das unter Umständen bei einem kleinen Projekt eine Lösung. Auch wenn das alles Andere als sauber ist. Da ich aber die Modellierung nicht kenne, habe ich das einfach mal in den Raum geworfen. Als Denkansatz.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 16-12-2009, 22:01
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

du kannst bei der Instanziierung der User-Klasse das DB-Objekt an den User-Konstruktor übergeben (der muss dafür angepasst werden) und als privaten Member speichern. Jede User-Methode, welche die DB braucht, kann dann über z. B. $this->dbObject->... darauf zugreifen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 16-12-2009, 22:09
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:
Zitat von AmicaNoctis Beitrag anzeigen
du kannst bei der Instanziierung der User-Klasse das DB-Objekt an den User-Konstruktor übergeben (der muss dafür angepasst werden) und als privaten Member speichern. Jede User-Methode, welche die DB braucht, kann dann über z. B. $this->dbObject->... darauf zugreifen.
Auch wenn ich das auch nicht für sehr prickelnd halte. Ist aber Ansichtssache.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #7 (permalink)  
Alt 16-12-2009, 22:20
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Kropff Beitrag anzeigen
Auch wenn ich das auch nicht für sehr prickelnd halte. Ist aber Ansichtssache.
Was hast du gegen das Delegationsprinzip? Wenn eine Klasse die externen Ressourcen einer anderen (nicht verwandten) Klasse braucht, ist das doch wesentlich besser als die auf Krampf voneinander abzuleiten.

Generell würde ich es aber nach dem MVC-Pattern aufbauen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 16-12-2009, 22:23
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:
Zitat von AmicaNoctis Beitrag anzeigen
Was hast du gegen das Delegationsprinzip? Wenn eine Klasse die externen Ressourcen einer anderen (nicht verwandten) Klasse braucht, ist das doch wesentlich besser als die auf Krampf voneinander abzuleiten.
Ist imho beides nicht so toll. Aber wie ich schon sagte, das ist Ansichtssache.
Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Generell würde ich es aber nach dem MVC-Pattern aufbauen.
Dito!

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #9 (permalink)  
Alt 16-12-2009, 22:47
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

Zitat:
Zitat von Kropff Beitrag anzeigen
Ist imho beides nicht so toll. Aber wie ich schon sagte, das ist Ansichtssache.
Viel mehr bleibt da dann aber auch nicht mehr an Möglichkeiten. Vererbung oder Zugriff auf Objekt. Was wäre deiner Meinung nach sauber?
Mit Zitat antworten
  #10 (permalink)  
Alt 16-12-2009, 23:02
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Vererbung baut eine "ist eine" Beziehung auf.
"User ist eine DB"
Hört sich nicht gut an.

Meine Wahl wäre entweder Übergabe per Konstruktor, oder per Setter.


Und wenn per Setter, dann auch gleich ein Interface "NutzeDB"

PHP-Code:
Interface NutzeDB
{
  function 
setDB(MeineDbKlasse $db);
}

class 
User implements NutzeDB
{
 protected 
$db=null;
 public function 
setDB(MeineDbKlasse $db)
 {
   
$this->db $db;
 }

// und so weiter

1. Das ist eine saubere Nummer.
2. tuts gut in einer Factory und mit dem DI Pattern

Zitat:
Viel mehr bleibt da dann aber auch nicht mehr an Möglichkeiten.
Singleton
Aber das wollen wir ja auch nicht.
Zumindest ich nicht.
Aber besser/logischer als die vererbungs Variante.
__________________
Wir werden alle sterben

Geändert von combie (16-12-2009 um 23:08 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 16-12-2009, 23:05
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:
Zitat von PHP-Desaster Beitrag anzeigen
Viel mehr bleibt da dann aber auch nicht mehr an Möglichkeiten. Vererbung oder Zugriff auf Objekt. Was wäre deiner Meinung nach sauber?
Ich reiche (normalerweise) Daten vom Controller an ein Model weiter, dass dann Zugriff auf eine Datenbank hat. Also ganz einfach(!) gesagt:
PHP-Code:
class Controller -> Zugriff auf entsprechendes Model
class Model extends DB 
Aber so richtig toll finde ich das nicht. Ist nur einen Bauchgeschichte und ich suche nach Alternativen. Habe bisher nur keine gefunden. Nenn das einfach Ordnungswahn.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite

Geändert von Kropff (16-12-2009 um 23:08 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 16-12-2009, 23:05
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Die saubere Variante wäre, dass die User-Klasse selbst nicht aktiv auf die DB zugreift, sondern sich durch den Controller (MVC) befüllen lässt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (16-12-2009 um 23:09 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 16-12-2009, 23:05
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

OffTopic:
Eigentlich gehört da ja noch so einiges zwischen. Denn User ist keine "Nutze DB" sondern viel mehr ein Record. Und ein Record ist eine Untermenge einer Tabelle ... während DIESE eine Untermenge der Datenbank ist. Und so sollte man das auch aufbauen. Und schupsdiwups hat man auch schon kapiert, was es mit diesen Modellen auf sich hat.

PHP-Code:
class DB {}

class 
Table {
     protected 
$_db;
}

class 
Record {
     protected 
$_table;
}

class 
User extends Record {


Dahingehend googlet man am besten auch mal nach Law of Demeter.


Geändert von unset (16-12-2009 um 23:08 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 16-12-2009, 23:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

@unset: Der Ansatz ist zwar sauber, hat aber den Nachteil, dass man dann entweder zusätzlich noch eine Klasse UserTable braucht, die ihre Datensätze von der Klasse User instanziiert, statt von Record oder beim Instanziieren von Table den Klassennamen für die gewünschte spezialisierte Record-Klasse übergeben muss.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #15 (permalink)  
Alt 16-12-2009, 23:17
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Das ist ja ein lösbares Problem. Da kann man mit konventionen Arbeiten (Benamung der Klasse oder der Tabelle), mit hard-coded Properties oder einfach indem man das der Tabelle beim instazieren schon sagt.

Ich arbeite da mit Konventionen ... hatte ich ja schon mal angedeutet ... was den Vorteil hat, dass ich Table- und Record-Klassen im Normalfall gar nicht anlegen brauche sondern die ihre Parameter selbst ermitteln können. Erst wenn besondere Methoden gebraucht werden, muss ich die Klasse anlegen.

Und sauber muss es immer sein
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
[OOP] Instanz an Unterklasse weiterreichen? frankburian PHP Developer Forum 15 26-10-2008 16:28
onclick und Instanz strauberry HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 16 04-08-2008 20:54
PHP MSSQL_CONNECT Instanz Mickl PHP Developer Forum 1 14-02-2008 21:45
[OOP] class in anderer class verfügbar machen Creativ PHP Developer Forum 6 28-03-2005 20:55
Flash - Instanz Xaniel Grafik / Design / Flash ... 5 27-03-2002 01:14

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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:49 Uhr.