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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
22.06.2004, 12:49:32
|
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_user( DB_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.
|
22.06.2004, 23:32:05
|
|
Junior Member
|
|
Registriert seit: Nov 2003
Beiträge: 207
|
|
@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
|
23.06.2004, 13:19:25
|
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_HOST, DB_USER, DB_PASS, DB_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_board, CONN_ID);
?>
Geändert von René_M (23.06.2004 um 13:21:44 Uhr)
|
23.06.2004, 14:47:52
|
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.
|
23.06.2004, 14:51:44
|
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.
|
23.06.2004, 15:16:49
|
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?
|
23.06.2004, 23:58:00
|
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_HOST, DB_USER, DB_PASS, DB_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...
|
24.06.2004, 15:17:13
|
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.
Geändert von René_M (24.06.2004 um 15:22:18 Uhr)
|
25.06.2004, 15:01:32
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
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;
|
25.06.2004, 19:14:13
|
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_HOST, DB_USER, DB_PASS, DB_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.
Geändert von René_M (25.06.2004 um 20:15:10 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:45:45 Uhr.
|