Avatar billede Slettet bruger
04. januar 2013 - 13:01 Der er 11 kommentarer og
1 løsning

OOP: Addition af definerede objekter

Jeg har defineret en instantiable class Amount, som indeholder data omkring valuta og værdi, for at holde styr på de to ting i et regnskabsprogram.

De metoder I skal kende er:

public function __construct($amount, $currency = null) // hvis is_null($currency) vælger den default
public function get($currency = null) // hvis is_null($currency) vælger den default

Dvs. lige nu, hvis jeg skal addere to summer er jeg nødt til:
$a = new Amount(100);
$b = new Amount(150);
$sum = new Amount($a->get()+$b->get());

Medmindre jeg selvfølgelig laver en static public function addAmounts(/* args */) eller noget i den stil. Men er det muligt at definere så jeg kan lave således:
$a = new Amount(100);
$b = new Amount(150);
$sum = $a + $b;

Altså for min klasse, definere hvordan den skal opføre sig ved standard regneregler.
Avatar billede olebole Juniormester
04. januar 2013 - 14:07 #1
<ole>

Dit ønske hænger vist ikke rigtig sammen med OOP tankegang. Her er $a og $b to objekter:

$a = new Amount(100);
$b = new Amount(150);

- men her ønsker du, de to objekter skal være to tal:

$sum = $a + $b;

/mvh
</bole>
Avatar billede Slettet bruger
04. januar 2013 - 14:12 #2
Jeg ønsker ikke at de skal være tal. Jeg ønsker at definere addition for min klasse, hvor jeg så ville definere hvad der skal ske hvis man forsøger det. Jeg er så ude efter at definere det sådan, at den adderer de involverede "amount"-attributter og returnerer et nyt ("sammensmeltet") objekt af den klasse.
Avatar billede olebole Juniormester
04. januar 2013 - 14:22 #3
Så gør du sådan:

$sum = $a->amount + $b->amount;
Avatar billede olebole Juniormester
04. januar 2013 - 14:24 #4
Nu har jeg læst #2 tre-fire gange mere, og jeg tror, du har misforstået OOP en del. Det er lidt svært at forstå, hvad du tænker  =)
Avatar billede Slettet bruger
04. januar 2013 - 19:21 #5
Jeg håber ikke jeg har mistforstået OOP en del - nu har jeg arbejdet med det i et par år :-)

Mit spørgsmål går blot ud på om det er muligt at definere hvordan den skal opføre sig ved de basale matematiske regnemetoder. Fordelen ved det ville være, at jeg så deri kunne sørge for at opnå ens valuta, så jeg ikke behøver bekymre mig om det, hvis $a og $b kommer to forskellige steder fra.

Jeg fornemmer lidt at jeg ikke kommer længere, men kan du se hvor jeg vil hen?
Avatar billede arne_v Ekspert
04. januar 2013 - 19:36 #6
PHP understoetter ikke operator overload a la C++.

Saa ....

:-(
Avatar billede olebole Juniormester
04. januar 2013 - 19:43 #7
Ahhh, nu forstår jeg. Nej, du kan hverken overskrive bestående eller definere nye operatorer
Avatar billede Slettet bruger
04. januar 2013 - 19:45 #8
Ah, det var dét det hedder. Måske min formulering der var lidt skæv efter en hel dag med eksamenslæsning. Tak. Jeg havde nemlig rodet med noget MATLAB hvor man kunne, skide smart. Points?
Avatar billede arne_v Ekspert
04. januar 2013 - 19:47 #9
... a la C++, C#, Scala etc..
Avatar billede olebole Juniormester
04. januar 2013 - 19:53 #10
Ikke point til mig, tak. Og det var arne_v, der gennemskuede, hvad du mente  =)
Avatar billede arne_v Ekspert
05. januar 2013 - 01:28 #11
svar
Avatar billede arne_v Ekspert
05. januar 2013 - 01:29 #12
Hvis du virkeligt vil have operator overload, saa hent dette:

http://pecl.php.net/package/operator

og byg PHP med det.

:-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester