Thread View: be.comp.programming
9 messages
9 total messages
Started by Ward Poelmans
Sun, 11 May 2003 14:54
PHP probleempje
Author: Ward Poelmans
Date: Sun, 11 May 2003 14:54
Date: Sun, 11 May 2003 14:54
36 lines
1571 bytes
1571 bytes
Kan iemand mij zeggen waarom het volgende stukje php
code niet werkt?
Als je het uitvoert staat er gewoon:
Naam:
Terwijl er:
Naam: Hello
zou moeten staan.
Ward.
<?php
class test {
var $naam;
function setnaam($naam) {
$this->naam = $naam;
}
function getnaam() {
return $this->naam;
}
}
function haaldata($data) {
$data->setnaam("hello");
}
function toondata($data) {
echo "Naam: " . $data->getnaam() . "<br>";
}
$gegevens = new test;
haaldata($gegevens);
toondata($gegevens);
?>
Re: PHP probleempje
Author: Roel Schroeven
Date: Sun, 11 May 2003 15:44
Date: Sun, 11 May 2003 15:44
66 lines
2715 bytes
2715 bytes
Ward Poelmans wrote:
> Kan iemand mij zeggen waarom het volgende stukje php
> code niet werkt?
> Als je het uitvoert staat er gewoon:
> Naam:
> Terwijl er:
> Naam: Hello
> zou moeten staan.
>
> Ward.
>
> <?php
>
> class test {
> var $naam;
> function setnaam($naam) {
> $this->naam = $naam;
> }
>
> function getnaam() {
> return $this->naam;
> }
> }
>
> function haaldata($data) {
> $data->setnaam("hello");
> }
>
> function toondata($data) {
> echo "Naam: " . $data->getnaam() . "<br>";
> }
>
> $gegevens = new test;
> haaldata($gegevens);
> toondata($gegevens);
>
> ?>
Je moet in haaldata en toondata het argument $data meegeven als call by
reference in plaats van call by value. Anders wordt het object in zijn
geheel gekopieerd, en werken de instructies binnen de functies op die
kopie in plaats van op het origineel.
In php doe je dat door er '&' voor te zetten in de functiedefinitie:
function haaldata(&$data) ...
en
function toondata(&$data) ...
Eigenlijk begrijp ik wel niet goed waarom je daar ook geen member
functies van maakt. In plaats van
haaldata($gegevens);
toondata($gegevens);
kan je het dan zo doen:
$gegevens->haaldata();
$gegevens->toondata();
Mij lijkt dat alleszins logischer.
--
"Codito ergo sum"
Roel Schroeven
http://roelschroeven.net
Re: PHP probleempje
Author: JeroenV
Date: Sun, 11 May 2003 15:47
Date: Sun, 11 May 2003 15:47
32 lines
2014 bytes
2014 bytes
Ward Poelmans wrote:
> Kan iemand mij zeggen waarom het volgende stukje php
> code niet werkt?
> Als je het uitvoert staat er gewoon:
> Naam:
> Terwijl er:
> Naam: Hello
> zou moeten staan.
PHP geeft standaard de waarde van een functieparameter door "by value".
M.a.w., $gegevens en $data zijn 2 verschillende variabelen. $gegevens
blijft ongewijzigd, terwijl $data wel degelijk gewijzigd wordt.
Je kan variabelen "by reference" doorgeven, waarmee het dus wel zou lukken.
Het enige wat je hiervoor moet doen is een ampersand (&) voor de
functieparameter zetten:
> function haaldata(&$data) {
> $data->setnaam("hello");
> }
>
> function toondata(&$data) {
> echo "Naam: " . $data->getnaam() . "<br>";
> }
Meer info op
<URL:http://www.php.net/manual/en/functions.arguments.php#functions.arguments.by-reference>
--
Mvg, JeroenV
Nederlandstalig Usenetportaal: <URL:http://www.briachons.org/>
Re: PHP probleempje
Author: JeroenV
Date: Sun, 11 May 2003 15:49
Date: Sun, 11 May 2003 15:49
22 lines
1580 bytes
1580 bytes
Roel Schroeven wrote: <knip> > Eigenlijk begrijp ik wel niet goed waarom je daar ook geen member > functies van maakt. In plaats van > > haaldata($gegevens); > toondata($gegevens); > > kan je het dan zo doen: > > $gegevens->haaldata(); > $gegevens->toondata(); > > Mij lijkt dat alleszins logischer. Voor toondata() mss wel, maar waarom met haaldata()? Dan is het abstracte van je klasse weg... -- Mvg, JeroenV Nederlandstalig Usenetportaal: <URL:http://www.briachons.org/>
Re: PHP probleempje
Author: Roel Schroeven
Date: Sun, 11 May 2003 16:04
Date: Sun, 11 May 2003 16:04
29 lines
2024 bytes
2024 bytes
JeroenV wrote: > Roel Schroeven wrote: > > <knip> > >>Eigenlijk begrijp ik wel niet goed waarom je daar ook geen member >>functies van maakt. In plaats van >> >>haaldata($gegevens); >>toondata($gegevens); >> >>kan je het dan zo doen: >> >>$gegevens->haaldata(); >>$gegevens->toondata(); >> >>Mij lijkt dat alleszins logischer. > > > Voor toondata() mss wel, maar waarom met haaldata()? Dan is het abstracte > van je klasse weg... Hm, ja, misschien wel. Hangt af van de context. In het gegeven voorbeeld zie ik niet veel verschil in abstractie tussen beide. -- "Codito ergo sum" Roel Schroeven http://roelschroeven.net
Re: PHP probleempje
Author: Ward Poelmans
Date: Mon, 12 May 2003 15:21
Date: Mon, 12 May 2003 15:21
9 lines
1337 bytes
1337 bytes
"Ward Poelmans" <Ward.Poelmans@my-mail.ch.REMOVE_THIS> wrote in news:pan.2003.05.11.14.54.45.290882@my-mail.ch.REMOVE_THIS: > > bedankt allemaal!! Ward.
Re: PHP probleempje
Author: Ward Poelmans
Date: Mon, 12 May 2003 15:22
Date: Mon, 12 May 2003 15:22
10 lines
1474 bytes
1474 bytes
JeroenV <jeroenv@pebbels.be.remove> wrote in news:47848962.TS4J97216d@jvaes.cjb.net: > Voor toondata() mss wel, maar waarom met haaldata()? Dan is het abstracte > van je klasse weg... Ik heb nog nooit met klassen gewerkt en dit was gewoon een testje. Maar wat bedoel je met abstract? Ward.
Re: PHP probleempje
Author: JeroenV
Date: Mon, 12 May 2003 16:51
Date: Mon, 12 May 2003 16:51
22 lines
2063 bytes
2063 bytes
Ward Poelmans wrote: > JeroenV <jeroenv@pebbels.be.remove> wrote in > news:47848962.TS4J97216d@jvaes.cjb.net: > >> Voor toondata() mss wel, maar waarom met haaldata()? Dan is het abstracte >> van je klasse weg... > > Ik heb nog nooit met klassen gewerkt en dit was gewoon een testje. > Maar wat bedoel je met abstract? Een klasse is een abstractie. Vergelijk het met een cake en de bakvorm: de vorm is de klasse, een cake is een instantie van die klasse. Klassen moet je dus zo algemeen mogelijk houden. Als je "haaldata" in de klasse gaat zetten is ze niet meer algemeen, aangezien je daar een vaste waarde aan de variabele "naam" gaat geven. In die context is dat dus niet echt goed. -- Mvg, JeroenV Nederlandstalig Usenetportaal: <URL:http://www.briachons.org/>
Re: PHP probleempje
Author: Roel Schroeven
Date: Mon, 12 May 2003 18:18
Date: Mon, 12 May 2003 18:18
38 lines
3008 bytes
3008 bytes
Ward Poelmans wrote: > JeroenV <jeroenv@pebbels.be.remove> wrote in > news:47848962.TS4J97216d@jvaes.cjb.net: > > >>Voor toondata() mss wel, maar waarom met haaldata()? Dan is het abstracte >>van je klasse weg... > > > Ik heb nog nooit met klassen gewerkt en dit was gewoon een testje. > Maar wat bedoel je met abstract? Een abstractie is het verstoppen van de implementatiedetails, die de gebruiker van de abstractie toelaten op een hoger niveau te denken en te werken. Een filesystem is bijvoorbeeld een abstractie, omdat het je toelaat te werken met files en directories in plaats van cilinders en sectoren. Bonus is dat je dikwijls de implementatie kan veranderen, en toch dezelfde interface behouden. Zo kan je probleemloos verschillende filesystems gebruiken (ext2, ext3, vfat, nfs, smbfs, ...) zonder al je programma's te moeten aanpassen. Software is eigenlijk een stapel van de ene abstractielaag bovenop de andere. Een klasse is een goede methode om interface en implementatie gescheiden te houden, en dus om een abstractie te cre๏ฟฝren. Over het algemeen is het een goed idee de onderdelen van je programma zo abstract mogelijk te houden, maar zoals zo dikwijls kan overdaad ook schadelijk zijn, zoals Joel Spolsky beschrijft: http://www.joelonsoftware.com/articles/LeakyAbstractions.html Jeroen bedoelt hier dat je haaldata() op een andere manier zou kunnen implementeren, of andere functies maken die hetzelfde doen, zonder dat je de klasse hoeft te veranderen. -- "Codito ergo sum" Roel Schroeven http://roelschroeven.net
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads