[PHP] einfaches classen-prob...

zuendkerzn

mir is langweilig
24 August 2006
50
1
Hiho,

ich hab iwie n problem und zwar ich bin grad dabei mir ne neue klassendatei zu schreiben und da brauch ich sql zugang jetzt hab ich folgendes problem wie kann ich machen das ich meine sql klasse nur einmal öffnen muss und das dann für alle funktionen innerhalb meiner klasse übernimmt... weil iwie übernimmt der des dann nur für die aktuelle funktion innerhalb meiner klasse?

hoffe ihr wisst was gemeint is :ugly:


danke schonmal

mfg
 
Hiho,

ich hab iwie n problem und zwar ich bin grad dabei mir ne neue klassendatei zu schreiben und da brauch ich sql zugang jetzt hab ich folgendes problem wie kann ich machen das ich meine sql klasse nur einmal öffnen muss und das dann für alle funktionen innerhalb meiner klasse übernimmt... weil iwie übernimmt der des dann nur für die aktuelle funktion innerhalb meiner klasse?

hoffe ihr wisst was gemeint is :ugly:


danke schonmal

mfg

verstehe ich nicht so ganz ;)
mache mal beispiel code bitte
 
ok hmmm :biggrin:

ich mach mal n beispielcode

PHP:
<?php
class bild {

var $bildid;      //galerieid||bildnr(1-30)
[...]
var $galeriejahr;

function bild($bildid, $zufallsaufruf=false){
$sql=new sql("localhost", "user", "asdf", "asdf");  //sql-classe starten
[...]
}

function abstimmen($vote) { //$vote 1-5, 5=beste

$sql=new sql("localhost", "user", "asdf", "asdf");  //sql-classe starten

[...]

$sql->updaten("bildvotes", "teilnehmer='$newteilnehmer', wert='$newwert' WHERE bildid='".$this->bildid."'");
}

[...]

ich muss in jeder klasse funtion meine sql-classe wieder starten weil ich sonst den "parameter" $sql nimmer hab ich müsst also iwie die zeile

$sql=new sql("localhost", "user", "asdf", "asdf"); //sql-classe starten

public machen das er sie in der ganzen classe übernimmt
 
muss ich $sql ned iwie public machen oder so?

also der code den ich geschrieben hab funkt schon nur da muss ich wie gesagt in jeder funktion meine sql-classe neu starten... ;/


mfg
 
du könntest im Construktor die Verbindung öffnen und es in einer Variable speichern, die du in der Classe definiert hast.

Über $this->sql kannst du dann darauf zugreifen.

Sollte denke so funktionieren.
 
du könntest im Construktor die Verbindung öffnen und es in einer Variable speichern, die du in der Classe definiert hast.

Über $this->sql kannst du dann darauf zugreifen.

Sollte denke so funktionieren.

jo hab ich schon versucht nur wie definiere ich ne classe?
mit var/public hats ned gefunkt...
 
hmm, sowas habe ich so nicht gehabt.

hätte

var $sql;

und im construktor:

$this->sql = new sql...

versucht.

geht so nciht??
 
Entweder du initialisiert deine SQL-Klasse ausserhalb und bindest diese mittels global in jede Funktion ei, oder du übergibst jeder anderen klasse eine instanz von der SQL-Klasse, und/oder du arbeitest mit einem singleton pattern.
 
Entweder du initialisiert deine SQL-Klasse ausserhalb und bindest diese mittels global in jede Funktion ei, oder du übergibst jeder anderen klasse eine instanz von der SQL-Klasse, und/oder du arbeitest mit einem singleton pattern.

ok kannst du das bisschen erläutern weis ned was du mit instanz bzw. singleton pattern meinst?
 
Eine Instanz ist ebend eine Instanz. ;) In Code sollte sofort klar sein was eine Instanz ist:

PHP:
<?
class myClass { //Klasse bzw. Objekt

}

$foo = new myClass; //mit new erstellst du eine Insanz der Klasse und somit verwaist $foo auf eine Instanz der Klasse
$foo2 = new myClass; //eine weitere Instanz der Klasse erzeugen
?>

Und Pattern sind Entwurfsmuster, sprich allgemeine Lösungsansätze für alltägliche Probleme. Und ein Singleton Pattern ist ein Entwurfs das dafür sorgt das immer nur eine Instanz von einer Klasse existiert. Am besten du Googlest einfach mal ein wenig... das ist wirklich urschleim und x tausendmal beschreiben.