Portal > Foren > PHP > PHP-Programmierung > Grundlegende Frage zur Objektorientierung / OOP
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 04.07.2007, 21:11 Nach oben    #21
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

Gut danke, wieder ein schritt näher dem Ziel, das ZendFramework nutzen zu können
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 16:03 Nach oben    #22
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

hei ho ich hab mal ne Frage.
Und zwar hab ich eine Simple klasse, die mir Inhalt aus einer DB holt.
Und das gleich über den Construktor.

Mein Problem ist aber wenn ich nur eine neue klasse iniziere bekomm cih nicht den/das array zurück.
Wenn cih aber schreibe:
PHP-Code:
$foo->__construct(1$dbcfg); 
dann bekomm cih den array zurück.
Gibt es eine Möglichkeit das gleich über die klasse zu lösen.
also wenn cih schreibe:
PHP-Code:
new  foo_bar(1$dbcfg); 
grüße
Gabriel
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 16:48 Nach oben    #23
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

PHP-Code:
<?php

class foobar {

   public function 
__construct($foo$bar) {
     
$rArray = array();  
     return 
$rArray($foo$bar);
   }
}

$foobar = new foobar(2,4);
Allerdings rate ich davon ab das gleich im Konstruktor zu machen.
Bastel dir dafür doch einfach eine get-Methode à la:

PHP-Code:

public function getFooData($param) {
   
$row $this->db->query("SELECT "$param ." FROM table");
   return 
$this->db->fetchArray($row);

__________________
Vive la France! Welcome to Sarkoworld...

Geändert von ljungi (11.07.2007 um 16:52 Uhr)
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 17:13 Nach oben    #24
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

1. warum nicht im konstruktor. Ich mein wenn ich wirklcih nur diesen Array brauche, warum dann nicht gleich?

2. wie bekomm ich die strucktur:
PHP-Code:
$row $this->db->query("SELECT "$param ." FROM table"); 
Da wird ja auf die Variable "db" zugegriffen und die greift auf die methode "query" zu.

Aber wie müsste ich das programmieren?

Ihr seht, cih hab noch viel zu lernen
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 17:51 Nach oben    #25
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von kampfgnom Beitrag anzeigen
1. warum nicht im konstruktor. Ich mein wenn ich wirklcih nur diesen Array brauche, warum dann nicht gleich?
Genau für solche aufgaben eignen die Klassenmethoden bzw. statische Methoden.

Zitat:
Zitat von kampfgnom Beitrag anzeigen
2. wie bekomm ich die strucktur:
PHP-Code:
$row $this->db->query("SELECT "$param ." FROM table"); 
Da wird ja auf die Variable "db" zugegriffen und die greift auf die methode "query" zu.

Aber wie müsste ich das programmieren?
PHP-Code:
class Foo
{
    public function 
query($sql)
    {
        
//do something
    
}
}

class 
Bar
{
    protected 
$db null;

    public function 
__construct()
    {
        
$this->db = new Foo(()
    }

__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 17:53 Nach oben    #26
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

ah, ok danke.
Hab dann noch weiter probiert und gemerkt das es besser ist man nimmt noch ne methode.
Da lässt sich alles leichter steuern!

Zitat:
PHP-Code:
class Foo
{
    public function 
query($sql)
    {
        
//do something
    
}
}

class 
Bar
{
    protected 
$db null;

    public function 
__construct()
    {
        
$this->db = new Foo(()
    }

Danke für die Aufklärung
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 18:42 Nach oben    #27
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Würde dir allerdings noch empfehlen, mit einer Singleton-Klasse zu arbeiten. So brauchst du nicht immer in jeder Klasse ein neues Objekt zu erstellen, bzw musst es nicht jedesmal übergeben.

PHP-Code:
Class Singleton {
    private 
$failed false;
    private 
$date;
    private 
$id 0;

    
/**
     * Kontruktor
     *
     */
    
public function __construct() {
        
$this->classes = array();
    }
    
    
/**
     * Klasse Instanzieren
     *
     * @param string $className Name der Klasse.
     * @return instance
     */
    
public function getInstance($className) {
        if (isset(
$this->classes[$className])) {
               return 
$this->classes[$className];
               
           }        
    }
    
    
/**
     * Klasse zu Singleton hinzufuegen.
     *
     * @param string $savename Instanzname
     * @param string $classname Klassenname
     */
    
public function addClass($savename,$classname) {
        
$this->classes[$savename] = $classname;    
    }

Anwenden wie folgt (z.B.)

PHP-Code:
    /**
     * Konstruktor
     *
     * @param Singleton $singleton Objekt der Klasse Singleton
     */
class foo {
    public function 
__construct(Singleton &$singleton$transtbl) {
        
$this->_db       $singleton->getInstance('db');
        
$this->_tpl      $singleton->getInstance('tpl');
    }

So musst du nämlich nur einmal jedes Objekt im Singleton registrieren lassen:

PHP-Code:
$singleton = new Singleton//neues Objekt von Singleton erstellen

$db = new DB;
$singleton->addClass('db',$db); //Klasse "registrieren"

$tpl = new Smarty;
$tpl->template_dir 'templates';
$tpl->compile_dir 'templates/templates_c';
$singleton->addClass('tpl',$tpl); //nochmals... 

(Der oben gezeigte Code stammt aus dem LD-CMS)
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 19:05 Nach oben    #28
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

Ok Fragen zu dem Obigen Code:

1.
PHP-Code:
public function __construct() {
        
$this->classes = array();
    } 
Wo wird "classes" deklariert? oder genau zu diesem Zeitpunkt?

2. Was bringt das ganze?
Also bisher wird der Klassenname in einem Array gespeichert
bzw wieder ausgegeben? oder hab ich da was falsch verstanden?
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 19:09 Nach oben    #29
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Hinweis an dieser Stelle: Der Konstruktor kann nichts zurückgeben, weil die Rückgabe ja das Objekt bzw. eine Instanz des Objekts selbst ist.
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 19:15 Nach oben    #30
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von ljungi Beitrag anzeigen
Würde dir allerdings noch empfehlen, mit einer Singleton-Klasse zu arbeiten. So brauchst du nicht immer in jeder Klasse ein neues Objekt zu erstellen, bzw musst es nicht jedesmal übergeben...
Das von dir vorgesetellt Muster hat leider nicht viel mit Singelton zu
tun, sondern geht eher in Richtung Registry.
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 19:39 Nach oben    #31
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Mist

Aber es funktioniert und macht das was es soll
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 19:55 Nach oben    #32
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

Aber was soll es denn machen. *anspielung auf Vorpost*
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 19:57 Nach oben    #33
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
Standard

Wie dejan_spasic es schon anspricht, wie wäre es mit einer statischen Methode für deine Zwecke ?

Dbstuff::getResultsFor('param1','param2');

man erkennt im Code vielleicht auch mehr um was es geht und was da passiert, als man das nur mit dem Klassennamen tut.

mfg
robo47
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 20:24 Nach oben    #34
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Was es bringt?

Du musst nicht mehr die Objekte als Parameter übergeben
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 21:28 Nach oben    #35
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Zitat:
Zitat von ljungi Beitrag anzeigen
Was es bringt?

Du musst nicht mehr die Objekte als Parameter übergeben
Deswegen ist es dennoch kein Singleton, sondern wie gesagt eher eine Mischung aus Registry und Parameter-Objekt. Wenn schon, denn richtig bitte.

Singletons sind Klassen, zu denen es zur Laufzeit immer nur exakt eine Instanz geben darf. Erreichbar beispielsweise via:
PHP-Code:
class Foo
{
private static 
$instance false;
private function 
__construct() {}
public static function 
getInstance()
{
    if (
self::$instance === falseself::$instance = new self();
    return 
self::$instance;
}

Und folgende Frage:
Zitat:
Wo wird "classes" deklariert? oder genau zu diesem Zeitpunkt?
ist völlig berechtigt, denn der Code ist schlichtweg nicht sauber oder frei von Warnungen Solche Variablen sollte man immer auch deklarieren. "Leider" lässt PHP sowas zu.
Dem Autor ging es ja darum, OOP wirklich zu lernen und nicht einfach was niederzuhacken, daher muss man jetzt auch etwas Dipfelschisserich sein.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.07.2007, 21:59 Nach oben    #36
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Da hast du wohl recht.

Hoffe es hat dennoch geholfen
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.07.2007, 14:38 Nach oben    #37
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 433
Standard

Ok danke, hat geholfen

Wieder weiter mit OOP, da merkt man das man noch viel zu lernen hat
__________________
Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed
Kanedo CMS Projektseite: http://kanedo.redio.de/de/
RSS: http://kanedo.redio.de/rss.php
kampfgnom ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu OOP .. bob PHP-Programmierung 10 08.05.2006 22:15
Problem mit OOP und Vererbung Jay PHP-Programmierung 9 09.01.2006 15:36
Wie beginnne ich eine Seite mit Oop richtig? ex³ PHP-Programmierung 9 01.11.2005 17:38
Grundlegende Frage zu Tabellen mit Swing Herr Bö Allgemeine Java-Programmierung 1 02.08.2004 19:52


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45