Avatar billede Droa Seniormester
07. august 2010 - 01:43 Der er 7 kommentarer og
2 løsninger

Extended classes

Jeg sidder lidt og tænke på noget som Extended classes kan bruges til.. og siden det er svært og finde på noget, kom jeg lidt på en ide.. og ville høre om man kan bruge dem på denne måde?


class ItemContainer
{
  protected $items = new array();

  function addItems($itemname, $itemtype)
  {
  $items[] = $item;
  }
}

class Item Extends ItemContainer
{
  private $itemname;
  private $itemtype;

  function __contruct($itemname, $itemtype)
  {
  $this->itemname = $itemname;
  $this->itemtype = $itemtype;
  }
}


jeg tænkte om der der nogen ide i denne, vis man nu lavet den mere complex, og brugen for og komme tilbage til containern af en eller anden dum grund?


mange tak

jeg giver point i andre måder, eller ideer.. og lig et svar med det samme tak ;)
Avatar billede Droa Seniormester
07. august 2010 - 01:45 #1
rettede fejl


class ItemContainer
{
  protected $items = new array();

  function addItems($itemname, $itemtype)
  {
  $items[] = new Item($itemname, $itemtype);
  }
}

class Item Extends ItemContainer
{
  private $itemname;
  private $itemtype;

  function __contruct($itemname, $itemtype)
  {
  $this->itemname = $itemname;
  $this->itemtype = $itemtype;
  }
}
Avatar billede arne_v Ekspert
07. august 2010 - 02:00 #2
Jeg mener absolut ikke at den konstruktion giver mening.

Item er ikke en specialisering af ItemContainer.

Hvis du vil kunne gå tilbage så kan du lade Item have en referance til sin ItemContainer, men jeg er også skeptisk overfor den ide.
Avatar billede Slettet bruger
07. august 2010 - 08:12 #3
Altså indeholdt i containeren findes et item, som er en extension af container-klassen. Som en russisk dukke med an anden inden i, blot er den indre "større" end den ydre.
- det lyder umiddelbart paradopksalt... Får du lov ?
Avatar billede intenz Novice
07. august 2010 - 09:46 #4
Enig med arne_v. Det du forsøger giver ikke meget mening. Inheritance til specialisering, og ikke til seperat funktionalitet. Skole-eksemplet kan se sådan ud:

class Animal {
  function eat() {
    // dyret spiser
  }
 
  function sleep() {
    // dyret sover
  }
}
[div]

En specialisering kan se sådan ud:
[div]
class Duck extends Animal {
  function quack() {
    // and'ens snakker
  }

  function fly() {
    // flyv
  }
}

osv.

En collection bør laves i en seperat fil, f.eks.

class AnimalCollection {
  private $animals = array();

  function addAnimal($animal) {
    $this->animals[] = $animal;
  }
}
Avatar billede Droa Seniormester
07. august 2010 - 13:00 #5
det var er lige det.. hmm jeg sad os lidt og lavede noget sjov med det igår, men fik det aldrig til og virke 100% med min måde.. og jeg kunne heller ikke forstille mig det i nogen rigtig situation, da det både var rodet og mod alle programmøres "law of nature".. og jeg vil hoppe tilbage til KIS metoden.. mange tak for feedback.. og jeg syntes både Arnv_V skal svare for sin kommentar, og intenz for sit exempel på den korrekte måde at bruge extends.. som jeg endnu ikke har fået nogen ide om hvad situationer jeg skal bruge på endnu... men det skal nok komme en dag håber jeg
Avatar billede intenz Novice
07. august 2010 - 18:10 #6
Mit kommer her.

Hvis du gerne vil lære objekt orienteret programmering med PHP, kan denne bog anbefales:
http://www.amazon.com/PHP-Objects-Patterns-Practice-Second/dp/1590599098/ref=sr_1_1?ie=UTF8&s=books&qid=1281197331&sr=8-1
Avatar billede Droa Seniormester
07. august 2010 - 18:30 #7
den er hermed købt
Avatar billede arne_v Ekspert
08. august 2010 - 03:59 #8
Et klassisk OO eksempel:

<?php
abstract class Animal {
    private $name;
    public function __construct($name) {
        $this->name = $name;
    }
    public abstract function sound();
    public function says() {
        echo $this->name . ' siger ' . $this->sound() . "\r\n";
    }
}

class Dog extends Animal {
    public function sound() {
        return 'Vuf';
    }
}

class Cat extends Animal {
    public function sound() {
        return 'Mjav';
    }
}

$pets = array(new Dog('King'), new Cat('Sorte misser'));
foreach($pets as $pet) {
    $pet->says();
}
?>
Avatar billede arne_v Ekspert
08. august 2010 - 03:59 #9
og et svar fra mig
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