WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Arv i PHP (https://www.wn.se/forum/showthread.php?t=30750)

KarlRoos 2008-07-25 13:29

Hej!

Går det att ärva på följande sätt:
Kod:

<?php
class foobar extends enklass and entill
{
}
?>

Alltså från två andra klasser.
Lyckas inte få till det :( Tack på förhand!

jimmie 2008-07-25 13:33

Multipelt arv stödjs inte i PHP, multipla interfaces stödjs dock.

KarlRoos 2008-07-25 13:35

Oj, det var oväntat faktiskt! Är inte det en av basic punkterna för att räknas som OOP? <_<

Citat:

Originally posted by jimmie@Jul 25 2008, 13:33
multipla interfaces stödjs dock.
Förklara? :)

MMC 2008-07-25 14:09

Citat:

Ursprungligen postat av KarlRoos
Oj, det var oväntat faktiskt Är inte det en av basic punkterna för att räknas som OOP?
Citat:

Ursprungligen postat av jimmie
multipla interfaces stödjs dock.

Förklara?

Nej, multipla arv är definitvt inte en "basic" OOP-feature. Det är väldigt svårt att få till rätt och kan leda till konflikter som gör det svårt för kompilatorn att uppföra sig rätt, och ännu svårare för programmeraren att veta var det blir fel.

Interfaces låter dig speca vilka metoder som en implementerande klass måste innehålla, vilket betyder att du inte behöver veta alla detaljer om en klass så länge du kan klassens interface. Så länge som dina interfaces inte specar metoder med samma namn, kan din klass implementera flera interface.

Kan du ge ett riktigt exempel på var du hade tänkt använda multipla arv? I många fall finns det en bättre lösning än att göra på det sättet.

KarlRoos 2008-07-25 14:39

Tack för era svar.
Man lär sig något nytt varje dag :)

Citat:

Originally posted by MMC@Jul 25 2008, 14:09
Kan du ge ett riktigt exempel på var du hade tänkt använda multipla arv? I många fall finns det en bättre lösning än att göra på det sättet.
Jag kom på en alternativ lösning, tack ändå!

void 2008-07-25 14:56

Själv ramlar jag i fällan att ärva väl mycket, vet inte om det är relevant till trådskaparens problem men att tänka is-a eller has-a är alltid bra.

Ärvda klasser när det egentligen inte är bra..
Citat:


class Engine
{
private double horsepower;
Engine(double hp) { hp=horsepower; }
void StartEngine();
}
class Vehicle extends Engine // bad design
{
Vehicle(double hp) { super(hp); }
}
Vehicle volvo = new Vehicle(80);
volvo.StartEngine();

När man egentligen bör använda composition (has-a)
Citat:


class Engine
{
private double horsepower;
Engine(double hp) { hp=horsepower; }
void StartEngine();
}
class Vehicle
{
private Engine engine;
Vehicle (double hp) { engine=new Engine(hp); }
void Start() { engine.StartEngine(); }
}

(Koden är i Java och är snodd från nån kurs på KTH)

Henrik 2008-07-25 15:21

Citat:

Originally posted by KarlRoos@Jul 25 2008, 14:39

Jag kom på en alternativ lösning, tack ändå


Berätta!

KarlRoos 2008-07-25 23:55

Citat:

Ursprungligen postat av Henrik
Citat:

Ursprungligen postat av KarlRoos
Jag kom på en alternativ lösning, tack ändå

Berätta!

Göra om de klasserna som skulle ärvas och den ärvande, det blev inte fint så jag struntade i funktionen jag hade tänkt mig... :)


Alla tider är GMT +2. Klockan är nu 17:46.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson