/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
OOP forståelsesproblem
Fra : Jens Thomsen


Dato : 20-04-08 15:44

Jeg har ca. følgende struktur [1]

Hvordan pusher jeg udvidelsen til den normale DB klasse ind blot ved at
instantiere special_class?

Jeg ønsker altså ikke:
$DB = new DC_DB ();

Men bevare normal instantiering (og DB handle åbning) i index.php og i det
omfang jeg instantierer ekstra klasser, at lade dem hælde deres
DB-spicifikke funktioner ind.



[1]
index.php
---------

$DB = new DB ();
$SC = new special_class ();

$DB->perform_magic ();



db.php
------

class DB {
function DB () {
$DBH = open_db();
}
}



special.php
-----------

class special_class {
function special_class () {
...
}
}

class SC_DB extends DB {
function perform_magic () {
...
}
}



 
 
Jens Thomsen (20-04-2008)
Kommentar
Fra : Jens Thomsen


Dato : 20-04-08 18:18


"Jens Thomsen" <jt@nej.nej> wrote in message
news:480b56f3$0$90270$14726298@news.sunsite.dk...
> Jeg har ca. følgende struktur [1]
>
> Hvordan pusher jeg udvidelsen til den normale DB klasse ind blot ved at
> instantiere special_class?


I ord er det jeg ønsker en lille DB klasse, som har funktioner der bruges af
mange klasser og selve DB åbningen.

De andre klasser jeg instantierer lægger så funktioner ind i $DB og anvender
samme DB åbning.

Skulle det være rigtigt fint kunne de ekstra klasser _kun_ anvende deres
egne funktioner, dem fra den oprindelige DB klasse samt det fælles DB
handle.

Hvor langt kan man komme med PHP og OOP i den henseende?



Martin (20-04-2008)
Kommentar
Fra : Martin


Dato : 20-04-08 20:12

Jens Thomsen wrote:
> "Jens Thomsen" <jt@nej.nej> wrote in message
> news:480b56f3$0$90270$14726298@news.sunsite.dk...
>> Jeg har ca. følgende struktur [1]
>>
>> Hvordan pusher jeg udvidelsen til den normale DB klasse ind blot ved at
>> instantiere special_class?

Hvis du laver din DB klasse som en abstract klasse, så vil den
automatisk initialiserer din __construct i DB klassen

abstract class DB {
var DB
protected __construct() {
$this->DB = $this->connect();
}
private connect() {
return mysql_select_db(...);
}
protected getRows() {
return mysql_fetch_rows();
}

}

class special_class extends DB {
// Inde i denne klasse er $this->DB nu din database connection

public function doStuff() {
$this->getRows();
}
}

osv osv :)


>
>
> I ord er det jeg ønsker en lille DB klasse, som har funktioner der bruges af
> mange klasser og selve DB åbningen.
>
> De andre klasser jeg instantierer lægger så funktioner ind i $DB og anvender
> samme DB åbning.
>
> Skulle det være rigtigt fint kunne de ekstra klasser _kun_ anvende deres
> egne funktioner, dem fra den oprindelige DB klasse samt det fælles DB
> handle.
>
> Hvor langt kan man komme med PHP og OOP i den henseende?

Hvis du bruger PHP 5.1+ så har du et fuldt OOP i PHP, hvis du bruger
under PHP 5.1 så har du et næsten fuldt - bruger du PHP 4 så har du et
meget tomt, og mangler abstract samt en masse andet :)

Jens Thomsen (20-04-2008)
Kommentar
Fra : Jens Thomsen


Dato : 20-04-08 20:23


"Martin" <martin@aarhof.invalid> wrote in message
news:480b956d$0$90265$14726298@news.sunsite.dk...
> Jens Thomsen wrote:
>> "Jens Thomsen" <jt@nej.nej> wrote in message
>> news:480b56f3$0$90270$14726298@news.sunsite.dk...
>>> Jeg har ca. følgende struktur [1]
>>>
>>> Hvordan pusher jeg udvidelsen til den normale DB klasse ind blot ved at
>>> instantiere special_class?
>
> Hvis du laver din DB klasse som en abstract klasse, så vil den automatisk
> initialiserer din __construct i DB klassen
>
> abstract class DB {
> var DB
> protected __construct() {
> $this->DB = $this->connect();
> }
> private connect() {
> return mysql_select_db(...);
> }
> protected getRows() {
> return mysql_fetch_rows();
> }


Det er en del mere avanceret end jeg plejer at gøre, så der er lige lidt at
læse på

Tak for svaret. Det hjælper mig langt videre!



Martin (20-04-2008)
Kommentar
Fra : Martin


Dato : 20-04-08 20:06

Jens Thomsen wrote:
> Jeg har ca. følgende struktur [1]
>
> Hvordan pusher jeg udvidelsen til den normale DB klasse ind blot ved at
> instantiere special_class?
>
> Jeg ønsker altså ikke:
> $DB = new DC_DB ();
>
> Men bevare normal instantiering (og DB handle åbning) i index.php og i det
> omfang jeg instantierer ekstra klasser, at lade dem hælde deres
> DB-spicifikke funktioner ind.
>
>
>
> [1]
> index.php
> ---------
>
> $DB = new DB ();
> $SC = new special_class ();
>
> $DB->perform_magic ();
>
>
>
> db.php
> ------
>
> class DB {
> function DB () {
> $DBH = open_db();
> }
> }
>
>
>
> special.php
> -----------
>
> class special_class {

class special_class extends SC_DB {

> function special_class () {
> ...
> }
> }
>
> class SC_DB extends DB {
> function perform_magic () {
> ...
> }
> }
>
>


Michael Rasmussen (21-04-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 21-04-08 09:54



Michael Rasmussen (21-04-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 21-04-08 09:56



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste