/ 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
Objekter i PHP
Fra : Rasmus


Dato : 16-11-06 00:25

Jeg har en del erfaring med objektorienteret programmering i
JAVA, og synes syntaksen osv. i OOP i php minder meget om det jeg
kender. Men bliver ved med at støde ind i nogen grundlæggende
problemer:

Hvornår slettes et objekt? Altså gemmes det som en session der
kan fortsætte mens der surfes mellem sider på min hjemmeside?
Eller skal der i hver side oprettes objekterne forfra?

Hvilke ting er oplagt at lave et objekt for? Overvejer at lade et
"bruger objekt" stå for login, validation osv. men synes ikke det
er helt åbentlyst at det giver nogen fordele. Har lavet et
forum-objekt der har nogen database objekter som variabler, og i
det tilfælde giver det mere mening.

Men generelt synes jeg stadig OOP giver mere mening i egentlige
programmer end i php.

Skal lige siges at den side jeg er ved at lave skal blive en
community agtig side for en klan. Med forum, nyhedsscript, replay
upload, osv.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Michael Rasmussen (16-11-2006)
Kommentar
Fra : Michael Rasmussen


Dato : 16-11-06 01:18

On Wed, 15 Nov 2006 23:25:04 +0000, Rasmus wrote:

>
> Hvornår slettes et objekt? Altså gemmes det som en session der
> kan fortsætte mens der surfes mellem sider på min hjemmeside?
> Eller skal der i hver side oprettes objekterne forfra?
>
Objekter slettes, når siden er blevet fremvist. Du kan gemme reference til
objektet i sessionen, hvis du vil anvende det på andre sider. Se mit
vedhæftede eksempel. Håber det kan give dig noget inspiration.

<?php
require_once 'objekt.php';

session_start();

$ref = new ObjektDemo();
$_SESSION['objRef'] = $ref;

print <<<_end
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html><head>
<title>Objekt Demo - side 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head><body>
_end;
print $ref->toString() . "<br/>";

$ref->setS1("ny s1 værdi");
$ref->setS2("ny s2 værdi");

print "<a href=\"side2.php\">næste side</a>";
print "</body></html>";

?>

<?php
require_once 'objekt.php';

session_start();

$ref = $_SESSION['objRef'];

print <<<_end
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html><head>
<title>Objekt Demo - side 2</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head><body>
_end;
print $ref->toString() . "<br/>";

print "</body></html>";

?>

<?php
class ObjektDemo {
   private $s1;
   private $s2;

   public function __construct() {
    $this->s1 = "initial værdi for s1";
    $this->s2 = "initial værdi for s2";
   }

   public function setS1($s1) {
    $this->s1 = $s1;
   }

   public function setS2($s2) {
    $this->s2 = $s2;
   }

   public function getS1() {
    return $this->s1;
   }
   
   public function getS2() {
    return $this->s2;
   }

   public function toString() {
    return $this->s1 . " " . $this->s2;
   }

}

?>

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917

Martin (16-11-2006)
Kommentar
Fra : Martin


Dato : 16-11-06 09:24

Michael Rasmussen wrote:
> On Wed, 15 Nov 2006 23:25:04 +0000, Rasmus wrote:
>
>
>>Hvornår slettes et objekt? Altså gemmes det som en session der
>>kan fortsætte mens der surfes mellem sider på min hjemmeside?
>>Eller skal der i hver side oprettes objekterne forfra?
>>
>
> Objekter slettes, når siden er blevet fremvist. Du kan gemme reference til
> objektet i sessionen, hvis du vil anvende det på andre sider. Se mit
> vedhæftede eksempel. Håber det kan give dig noget inspiration.'

Jeg mindes at der tidligere i denne gruppe gik et spørgsmål om at
nedenstående ikke virkede efter hensigten.
Altså gemme et objekt i sessionen

Har du testet dit?

Jens Frøkjær (16-11-2006)
Kommentar
Fra : Jens Frøkjær


Dato : 16-11-06 10:28

Martin skrev:
> Michael Rasmussen wrote:
>> On Wed, 15 Nov 2006 23:25:04 +0000, Rasmus wrote:
>>
>>
>>> Hvornår slettes et objekt? Altså gemmes det som en session der
>>> kan fortsætte mens der surfes mellem sider på min hjemmeside?
>>> Eller skal der i hver side oprettes objekterne forfra?
>>>
>>
>> Objekter slettes, når siden er blevet fremvist. Du kan gemme reference
>> til
>> objektet i sessionen, hvis du vil anvende det på andre sider. Se mit
>> vedhæftede eksempel. Håber det kan give dig noget inspiration.'
>
> Jeg mindes at der tidligere i denne gruppe gik et spørgsmål om at
> nedenstående ikke virkede efter hensigten.
> Altså gemme et objekt i sessionen
>
> Har du testet dit?
Jeg gemmer tit objekter i session, man de skal være "serializable"
(http://dk.php.net/serialize), den eneste type der ikke er serializable
er resourcer (http://dk.php.net/manual/da/language.types.resource.php),
det betyder du ikke (fornuftigt) kan gemme database-forbindelse, åbne
filer og den slags.

et meget simpelt eksempel:
<?
session_start();
class simple {
function __constructor() {
$this->hest = "test";
}
}
$_SESSION["ss"] = new simple();
?>

Du spørger hvad der er oplagt at bruge et objekt til, mit korte svar er
intet. Det lidt længere svar er en masse. Jeg bruger objekter til at
lave namespaces. Derudover bruger jeg det når jeg har brug for
nedarvning. Jeg ville ikke lave et brugerobjekt og lade det stå for
login m.m., men det ville jeg heller ikke gøre i Java. Jeg ved godt at
det ikke er pænt objektorienteret og alt muligt, men hvis nu man har
10.000 brugere og skal lave noget på dem, så skulle man jo i princippet
lave 10.000 objekter og det er ikke min kop te, men det er naturligvis
individuelt (det fik jeg så også slag for at sige til OOP-eksamen - hihi).
--
Jens F!

Martin (16-11-2006)
Kommentar
Fra : Martin


Dato : 16-11-06 10:41

Jens Frøkjær wrote:
> Jeg gemmer tit objekter i session, man de skal være "serializable"
> (http://dk.php.net/serialize), den eneste type der ikke er serializable
> er resourcer (http://dk.php.net/manual/da/language.types.resource.php),
> det betyder du ikke (fornuftigt) kan gemme database-forbindelse, åbne
> filer og den slags.

Ahh - ja det passer nok meget godt at det var fordi det var en resource
man prøvede at gemme i sessionen.

Men nu kan jeg selvfølgelig ikke huske det, det er flere måneder siden
der var en længere diskussion om dette emne.

> Du spørger hvad der er oplagt at bruge et objekt til, mit korte svar er
> intet. Det lidt længere svar er en masse. Jeg bruger objekter til at
> lave namespaces. Derudover bruger jeg det når jeg har brug for
> nedarvning.

Jeg bruger objekter til ALT - I bare mit galleri der er 5 klasser til at
styre det hele, som alle er extended fra en "main" klasse.

> Jeg ville ikke lave et brugerobjekt og lade det stå for
> login m.m., men det ville jeg heller ikke gøre i Java. Jeg ved godt at
> det ikke er pænt objektorienteret og alt muligt, men hvis nu man har
> 10.000 brugere og skal lave noget på dem, så skulle man jo i princippet
> lave 10.000 objekter og det er ikke min kop te, men det er naturligvis
> individuelt (det fik jeg så også slag for at sige til OOP-eksamen - hihi).

Hvorfor have 10.000 objekter?? - Den forstår jeg godt nok ikke.

Et eksempel:

class Login
{

protected var $login;
protected var $pass;

function __construct() {
$this->login = $_SESSION["user"]["login"];
$this->pass = $_SESSION["user"]["pass"];
}

function isValid() {
/* DB forespørgel der kontrollerer login og pass */
if(SQL) return true;
else return false;
}

function getUserInfo() {
/* DB som henter ting */
return DB;
}

$user = new Login;
if(!$user->isValid()) // Ikke logget ind exit;
$bruger = $user->getUserInfo();

Jens Frøkjær (16-11-2006)
Kommentar
Fra : Jens Frøkjær


Dato : 16-11-06 12:15

Martin skrev:
> Jens Frøkjær wrote:
>> Jeg gemmer tit objekter i session, man de skal være "serializable"
>> (http://dk.php.net/serialize), den eneste type der ikke er
>> serializable er resourcer
>> (http://dk.php.net/manual/da/language.types.resource.php), det betyder
>> du ikke (fornuftigt) kan gemme database-forbindelse, åbne filer og den
>> slags.
>
> Ahh - ja det passer nok meget godt at det var fordi det var en resource
> man prøvede at gemme i sessionen.
>
> Men nu kan jeg selvfølgelig ikke huske det, det er flere måneder siden
> der var en længere diskussion om dette emne.
>
>> Du spørger hvad der er oplagt at bruge et objekt til, mit korte svar
>> er intet. Det lidt længere svar er en masse. Jeg bruger objekter til
>> at lave namespaces. Derudover bruger jeg det når jeg har brug for
>> nedarvning.
>
> Jeg bruger objekter til ALT - I bare mit galleri der er 5 klasser til at
> styre det hele, som alle er extended fra en "main" klasse.
>
> > Jeg ville ikke lave et brugerobjekt og lade det stå for
>> login m.m., men det ville jeg heller ikke gøre i Java. Jeg ved godt at
>> det ikke er pænt objektorienteret og alt muligt, men hvis nu man har
>> 10.000 brugere og skal lave noget på dem, så skulle man jo i
>> princippet lave 10.000 objekter og det er ikke min kop te, men det er
>> naturligvis individuelt (det fik jeg så også slag for at sige til
>> OOP-eksamen - hihi).
>
> Hvorfor have 10.000 objekter?? - Den forstår jeg godt nok ikke.
Hvis man f.eks. gerne ville have en liste med alle brugere, så er den OO
tilgang at man skal have et objekt pr. bruger. Men altså, jeg er bare
doven, og nu har jeg været med på php vognen temmelig længe, og i
virkeligheden handler det nok mere om at jeg gør som jeg plejer.
>
> Et eksempel:
>
> class Login
> {
>
> protected var $login;
> protected var $pass;
>
> function __construct() {
> $this->login = $_SESSION["user"]["login"];
> $this->pass = $_SESSION["user"]["pass"];
> }
>
> function isValid() {
> /* DB forespørgel der kontrollerer login og pass */
> if(SQL) return true;
> else return false;
> }
>
> function getUserInfo() {
> /* DB som henter ting */
> return DB;
> }
>
> $user = new Login;
> if(!$user->isValid()) // Ikke logget ind exit;
> $bruger = $user->getUserInfo();

Bertel Lund Hansen (16-11-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 16-11-06 12:32

Jens Frøkjær skrev:

>> Hvorfor have 10.000 objekter?? - Den forstår jeg godt nok ikke.

> Hvis man f.eks. gerne ville have en liste med alle brugere, så er den OO
> tilgang at man skal have et objekt pr. bruger.

Der er mange måder at designe en funktion der udskriver alle
brugere på. Hvis det f.eks. ligger i en database (og det gør det
jo nok med 10'000 brugere), så kan man i én forespørgsel få en
sorteret liste leveret fra databasesystemet.

Antallet af objekter under kørslen siger i sig selv meget lidt om
om programmet er designet og implementeret effektivt.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Jens Frøkjær (16-11-2006)
Kommentar
Fra : Jens Frøkjær


Dato : 16-11-06 21:11

Bertel Lund Hansen skrev:
> Jens Frøkjær skrev:
>
>>> Hvorfor have 10.000 objekter?? - Den forstår jeg godt nok ikke.
>
>> Hvis man f.eks. gerne ville have en liste med alle brugere, så er den OO
>> tilgang at man skal have et objekt pr. bruger.
>
> Der er mange måder at designe en funktion der udskriver alle
> brugere på. Hvis det f.eks. ligger i en database (og det gør det
> jo nok med 10'000 brugere), så kan man i én forespørgsel få en
> sorteret liste leveret fra databasesystemet.
>
> Antallet af objekter under kørslen siger i sig selv meget lidt om
> om programmet er designet og implementeret effektivt.
>
Nej netop! Jeg tror vi er 100% enige!
--
Jens F!

Bertel Lund Hansen (16-11-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 16-11-06 22:44

Jens Frøkjær skrev:

> Nej netop! Jeg tror vi er 100% enige!

Er vi? Jeg synes at OOP er fænomenalt og ærgrer mig jævnligt over
at jeg ikke fik det ind med modermælken.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Martin (16-11-2006)
Kommentar
Fra : Martin


Dato : 16-11-06 18:35

Jens Frøkjær wrote:
> Hvis man f.eks. gerne ville have en liste med alle brugere, så er den OO
> tilgang at man skal have et objekt pr. bruger. Men altså, jeg er bare
> doven, og nu har jeg været med på php vognen temmelig længe, og i
> virkeligheden handler det nok mere om at jeg gør som jeg plejer.

Jeg plejer heller ikke at gemme en hel klasse i en session (det må da
tage gevaldigt meget memory fra serveren?).

Jeg plejer altid at definere med define det generelle statiske
variabler. Det er nu ret man kan tilgå dem med VARIABEL også er de jo
også globale, så de kan bruges i funktioner og klasser uden at skulle
lave dem global først.

Jeg startede med at lave et projekt HELT fra bunden hver gang, men det
ville tage ALT for langtid hvis man skulle gøre det ved hvert eneste
projekt - så ville man aldrig blive færdig.

Det er også noget jeg først er begyndt for et lille årstid siden, så jeg
er slet ikke speciel god ting OO PHP, men jeg kan da både mærke og se på
mine koder at det bliver bedre og bedre med at lave overskulig kode.

Klasser er jo så geniale at de kan genbruges til mange forskellige
projekter.

Michael Rasmussen (16-11-2006)
Kommentar
Fra : Michael Rasmussen


Dato : 16-11-06 11:50

On Thu, 16 Nov 2006 09:23:39 +0100, Martin wrote:

>
> Jeg mindes at der tidligere i denne gruppe gik et spørgsmål om at
> nedenstående ikke virkede efter hensigten.
> Altså gemme et objekt i sessionen
>
Det er noget vås. Dette gælder også Jens' påstand om ressourcer. En
ressource er en simpel file descriptor, der selvfølgeligt kan gemmes i et
objekt. Var dette ikke muligt, ville det være overordentligt vanskeligt
at lave f.eks. en webserver.

> Har du testet dit?
Selvfølgelig! Da alt source er vedlagt, havde det også været en smal sag
for dig at teste det.


--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste