26. februar 2006 - 20:54Der er
16 kommentarer og 1 løsning
Objekt på tværs af filer? (PHP5)
Hej Jeg har rodet lidt med en mysql-klasse jeg har bikset sammen. Jeg kunne godt tænke mig at undgå alt for mange "opkald" til databasen. Så hvordan undgår man det? Ja, i hvert fald ikke sådan her ...
----- Klasse-fil ---- class Db { // SQL-metode her ... } class User { // Metode der finder brugerens navn i databasen via en ID function name($id) { $obj_db->Query("SQL HER"); // <<--- Kan man ikke :( } } ---------------------
---- Objekt-fil ----- include("klasse-fil");
$obj_db = new Db; $obj_db->Open();
$obj_user = new User; print $obj_user->name;
$obj_db->Close(); ---------------------
... Det er jo ikke muligt at lave objektet i den ene fil og bruge den i den anden...
Hvis jeg læser rigtigt forsøger du i din klassefil at kalde en anden klasse uden først at oprette en instance af denne..
class User { // Metode der finder brugerens navn i databasen via en ID function name($id) { $obj_db = new Db; $obj_db->Query("SQL HER"); // <<--- Kan man ikke :( } }
Det er fuldstændig korrekt. Det var også meningen... Hvis jeg opretter en ny instans i metoden "name" så er jeg jo lige vidt. Det ville jo betyde at jeg i klassen "Db" skulle lave en metode der så sådan ud...
function __construct() { // Åben mysql forbindelse her... }
Og hvis jeg så bruger metoden "name" lad os sige 10 gange i objekt-filen så har jeg pludselig 10 gange opkald til databasen. Det må da kunne reduceres... ?
Hvis du skal udføre 10 kald til databasen, bliver du vel nødt til at udføre 10 kald til database?
Mht. oprettelse af et link til databasen, kan du sagtens nøjes med at gøre dette en gang, da en mysql_query og lignende kald, automatisk kigger efter et allerede åbent link til databasen.. Hvis det er sådan at du ønsker at undgå at oprette et nyt link, for hver query du afvikler?
class User extends DB { private $envar = null; function getEnvar() { if ( !is_null( $this->envar ) ) { return $this->envar; } else { // hent envar fra db og sæt $this->envar } } }
[...] "og efterfølgerne kalder en mysql_query uden at angive link"
Nu kunne jeg jo ikke pege præcist hvor du skulle fjerne denne link henvisning, da du ikke viste den del af dit script.. Men konceptet var beskrevet.
Tak for point :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.