SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #11  
Alt 22.06.2004, 13:49:32
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
wobei dann natürlich immer auch wenn du die klasse in 10 jahren benutzt, die konstanten zur datenbankverbindung gesetzt sein müssen.

ich empfehle also, sie bei initialisierung der klasse zu übergeben.

sprich also die klasse user_del so zu schreiben:

PHP-Code:
class user_del extends datenbank
{
    var 
$gmt_zeit;
    var 
$user_old;
    var 
$board_old;
function 
user_del($host,$user,$pass,$name) {

$this->dbhost $host;
$this->dbuser $user;
$this->dbpass $pass;
$this->dbname $name;
$this->db_conn();
}
    function 
zu_alt()
    {
            
$b_query 'SELECT `id`, `last` FROM `' $brenam '_board`';
            
$b_weg   $this->db_query($b_query);

            
/* usw. */
    
}
}

$obj = new del_userDB_HOST DB_USER DB_PASS DB_NAME ); 
//usw...

//nun ist der klasse del_user egal woher die zugansgdaten kommen, sie ist nicht mehr an dei konstanten gebunden. das ganze natürlich in der klasse datenbank auch noch so machen, wenns recht ist. 
Mit Zitat antworten
  #12  
Alt 23.06.2004, 00:32:05
Benutzerbild von NanoCyte
NanoCyte NanoCyte ist offline
Junior Member
 
Registriert seit: Nov 2003
Beiträge: 207
NanoCyte eine Nachricht über ICQ schicken
@feuervogel: thx für den tip, werds dann doch so rum machen, wie du vorgeschlagen hast.
bin auch erst bei klassen eingestiegen in das thema
Mit Zitat antworten
  #13  
Alt 23.06.2004, 14:19:25
René_M René_M ist offline
Junior Member
 
Registriert seit: Aug 2003
Ort: Fürstenau (Uckermark, Land Brandenburg)
Beiträge: 259
@feuervogel,

ist das eine vertrettbare Lösung, wenn man die Daten für die Eltern-Classe nicht durch alle Kind-Classen schleiffen will?

PHP-Code:
<?php

class datenbank
{
    var 
$dbhost;
    var 
$dbuser;
    var 
$dbpass;
    var 
$dbname;
    var 
$diffro;
    var 
$conn;

    function 
datenbank($db_host$db_user$db_pass$db_name$diff_ro)
    {
        
$this->dbhost $db_host;
        
$this->dbuser $db_user;
        
$this->dbpass $db_pass;
        
$this->dbname $db_name;
        
$this->diffro $diff_ro;
    }

    
/* usw */
}

/**/

$db = new datenbank(DB_HOSTDB_USERDB_PASSDB_NAME$diff_ro);

define('CONN_ID'$db->db_conn());

?>
PHP-Code:
<?php

class user_del extends datenbank
{
    var 
$gmt_zeit;
    var 
$user_old;
    var 
$board_old;
    var 
$conn;

    function 
user_del($zeit$del_user$del_board$conn_id)
    {
        
$this->gmt_zeit  $zeit;
        
$this->user_old  = (86400 $del_user);
        
$this->board_old = (86400 $del_board);
        
$this->conn      $conn_id;

        
$this->zu_alt();
    }

    
/* usw. */
}

/**/

$udel = new user_del($zeit$del_user$del_boardCONN_ID);

?>
__________________
Gruß
René

lange Weile dann --> Webchess 2003

Geändert von René_M (23.06.2004 um 14:21:44 Uhr)
Mit Zitat antworten
  #14  
Alt 23.06.2004, 15:47:52
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
ja, so könnte man es machen. aber da ich immer noch was finde: das aufrufen von klassen kostet zeit. sehr viel zeit. daher würde ich nur eine klasse einmal aufrufen wollen:)

zum thema zeit:

http://www.webmasterstop.com/tutoria...-PHP-OOP.shtml

wisst ihr, mir ist das im prinzip egal, wie ihr die klassen gestaltet, aber die erfahrung zeigt, dass ne klasse im prinzip wie so ne mühle ist: es kommt was rein und verändert wieder raus. dabei kann man grob mahlen, man kann fein mahlen, und man kann getreide, aber auch kaffee mahlen.

woher der kaffee kommt, ist der mühle doch egal, oder? ob aus ner dose oder ner tüte.

so solltet ihr auch klassen betrachten. eine klasse ist auf keinen fall an globale variablen gebunden oder an irgendwas außerhalb von ihr. also alles was in der klasse von außen kommt, wird übergeben.
Mit Zitat antworten
  #15  
Alt 23.06.2004, 15:51:44
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
p.s.: was du machst: du nimmst deine klasse db und verbindest das script mit der db. diese verindungskennung übergibst du nun der tochter klasse.

warum übergibst du nicht die instanz der db klasse und verbindest in der tochter klasse? du kannst sie ja ein mal in den konstruktor schreiben, schon "schleifst" du sie nicht mehr mit.
Mit Zitat antworten
  #16  
Alt 23.06.2004, 16:16:49
René_M René_M ist offline
Junior Member
 
Registriert seit: Aug 2003
Ort: Fürstenau (Uckermark, Land Brandenburg)
Beiträge: 259
Zitat:
Original geschrieben von feuervogel
übergibst du nicht die instanz der db klasse und verbindest in der tochter klasse? du kannst sie ja ein mal in den konstruktor schreiben, schon "schleifst" du sie nicht mehr mit.
Wie würde das an dem letzten Beispiel-Code aussehen?
Wie ist es wenn z.B. noch eine dritte o. vierte Classe existiert?
__________________
Gruß
René

lange Weile dann --> Webchess 2003
Mit Zitat antworten
  #17  
Alt 24.06.2004, 00:58:00
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
auch wenn ich stark nen zacken in der krone habe (scheiß fußball:)

PHP-Code:
<?php
class datenbank
{
    var 
$dbhost;
    var 
$dbuser;
    var 
$dbpass;
    var 
$dbname;
    var 
$diffro;
    var 
$conn;
    function 
datenbank($db_host$db_user$db_pass$db_name$diff_ro)
    {
        
$this->dbhost $db_host;
        
$this->dbuser $db_user;
        
$this->dbpass $db_pass;
        
$this->dbname $db_name;
        
$this->connecttodb$dbhost $dbuser $dbpass );
        
$this->selectdb$dbname );
    }
    
/* usw */
}

class 
user_del
{
    var 
$gmt_zeit;
    var 
$user_old;
    var 
$board_old;
    var 
$conn;
    function 
user_del($zeit$del_user$del_board$dbobj)
    {
        
$this->gmt_zeit  $zeit;
        
$this->user_old  = (86400 $del_user);
        
$this->board_old = (86400 $del_board);
        
$this->conn      $conn_id;
        
$this->zu_alt();
        
$dbobj->query"SELECT * FROM table" );
    }
    
/* usw. */
}
$db = new datenbank(DB_HOSTDB_USERDB_PASSDB_NAME$diff_ro);

$udel = new user_del($zeit$del_user$del_board$db);
?>
bei drei oder vier klassen? ich frag mich als schon warum das löschen des benutzers eine eigene klasse ist? könnte man da nicht viel zusammenfassen?

bei 3 oder 4 klassen werden die jeweiligen instanzen halt übergeben.

ich schreibe mal die tage eine parser klasse...dort kann gewählt werden zwischen bbcode-, spiegel.de- und LaTeX-parsing...
Mit Zitat antworten
  #18  
Alt 24.06.2004, 16:17:13
René_M René_M ist offline
Junior Member
 
Registriert seit: Aug 2003
Ort: Fürstenau (Uckermark, Land Brandenburg)
Beiträge: 259
Hi feuervogel,

so richtig zufrieden bin ich damit auch nicht. Wenn ich das so mache dann brauche ich ja das "... extends datenbank" nicht mehr. Da ja die ganze Classe in dem "$db" steckt.

Habe noch was rausgefunden die ganzen var ... aus der "datenbank" (Eltern-Classe) stehen in den Kind-Classen überhaupt nicht zur Verfügung.

Gibt es denn nicht irgend eine Möglichkeit das das $this->conn (Verbindungs-Kennung) zur Verfügung steht wenn man this->query(...) aus einer Kind-Classe aufruft.

---------

Wegen dem zusammenlegen ich brauche die "user_del" nur in einer spezielen Seite die "datenbank" in allen.

---------

Hatte mir gestern noch die eine Seite mit dem Diagramm angesehen. Konnte zwar nichts lesen (Kann kein englisch) aber wenn ich das Diagramm richtig deute ist es doch ein Fehler überhaupt Classen zu verwenden. Dann wenns sein muss nur eine Funktion?

Aber wo man hinschaut werden Classen geschreiben und verwendet?

--------

Wenn du willst kann ich dir ja auch mal die Classen komplett per E-Mail zusenden.
__________________
Gruß
René

lange Weile dann --> Webchess 2003

Geändert von René_M (24.06.2004 um 16:22:18 Uhr)
Mit Zitat antworten
  #19  
Alt 25.06.2004, 16:01:32
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 72
Beiträge: 4.001
Zitat:
Original geschrieben von René_M
Wenn ich das so mache dann brauche ich ja das "... extends datenbank" nicht mehr. Da ja die ganze Classe in dem "$db" steckt.
Du mußt im Konstruktor der Kindklasse den Konstruktor der Elterklasse aufrufen.
PHP-Code:
class vater
{
  var 
$test 'huhu';
  function 
vater ()
  {

  }
}

class 
sohn extends vater
{
  function 
sohn ()
  {
    
vater::vater();
    echo 
$this->test;
  }
}

$instanz = & new sohn
Mit Zitat antworten
  #20  
Alt 25.06.2004, 20:14:13
René_M René_M ist offline
Junior Member
 
Registriert seit: Aug 2003
Ort: Fürstenau (Uckermark, Land Brandenburg)
Beiträge: 259
Hi meikel,

mit der Funkt. "function conn_stand()" hatte ich das gelösst damit "$this->conn" in der Funkt. "db_query" da ist, wenn ich diese Funkt. aus der Kindklasse heraus aufrufe. Ohne gab es immer einen "Query-Fehler Nr. 0".

PHP-Code:
<?php

class datenbank
{
    var 
$dbhost;
    var 
$dbuser;
    var 
$dbpass;
    var 
$dbname;
    var 
$diffro;
    var 
$conn;

    function 
datenbank($db_host$db_user$db_pass$db_name$diff_ro)
    {
        
$this->dbhost $db_host;
        
$this->dbuser $db_user;
        
$this->dbpass $db_pass;
        
$this->dbname $db_name;
        
$this->diffro $diff_ro;

        
$this->db_conn();
    }

    function 
conn_stand()
    {
        static 
$verb;

        if(!empty(
$this->conn))
            
$verb $this->conn;

        return 
$verb;
    }

    function 
db_conn()
    {
        
$this->conn = @mysql_connect($this->dbhost$this->dbuser$this->dbpass);

        if(!
$this->conn)
            
$this->db_error('Connect');

        
$this->sele = @mysql_select_db($this->dbname$this->conn);

        if(!
$this->sele)
            
$this->db_error('Database');

        
$this->conn_stand();
    }

    function 
db_query($query)
    {
        
$this->result = @mysql_query($query$this->conn_stand());

        if(!
$this->result)
            
$this->db_error('Query');

        return 
$this->result;
    }

    
/* usw. */
}

/**/

$db =& new datenbank(DB_HOSTDB_USERDB_PASSDB_NAME$diff_ro);

?>
PHP-Code:
<?php

class user_del extends datenbank
{
    var 
$gmt_zeit;
    var 
$user_old;
    var 
$board_old;

    function 
user_del($zeit$del_user$del_board)
    {
        
$this->gmt_zeit  $zeit;
        
$this->user_old  = (86400 $del_user);
        
$this->board_old = (86400 $del_board);

        
$this->zu_alt();
    }

    function 
zu_alt()
    {
        
$bbrett = array( ... );

        foreach (
$bbrett as $brenam)
        {
            
$b_query 'SELECT `id`, `last` FROM `' $brenam '_board`';
            
$b_weg   $this->db_query($b_query);

            
/* usw. */
        
}
    }
}

/**/

$udel =& new user_del($zeit$del_user$del_board);

?>
--------

Nachtrag:

Was auch wichtig ist, die Kindklasse(n) sind nicht in allen Seiten enthalten nur die Elternklasse "db_class.php" ist in allen Seiten per require eingebunden.

Wenn ich das so mache wie in deinem Beispiel, muss ich ja die Verbindungsdaten (Username, PW, ...) auch über jede Kindklasse mitgeben.

Was den Fehler verursaht ist ja nur das fehlende "$this->conn" wenn die Funktionen in denen "$this->conn" verlangt wird, aus der / den Kindklassen heraus aufgerufen wird.

Vorschläge, Verbesserungen nehme ich dankend an.
__________________
Gruß
René

lange Weile dann --> Webchess 2003

Geändert von René_M (25.06.2004 um 21:15:10 Uhr)
Mit Zitat antworten
Antwort


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

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.


© 2001-2021 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt