Autorius Tema: class extends daugiau nei vieną klasę  (Skaityta 146 kartus)

Neprisijungęs Kalnų karalius

  • Naujokas
  • *
  • Įrašai: 104
  • Karma: +0/-0
    • Žiūrėti profilį
class extends daugiau nei vieną klasę
« Įrašytas: 2014-04-23 22:24:02 pm »
Taigi yra tokia problema, reikia į vieną pagrindinę klasę įtraukti kitas papildomas klases (pagrindinė klasė viską valdo, o papildomos klasės, kurias reikia įtraukti atsakingos už dizainą), bet neveikia tai. Gal turit idėjų dėl struktūros? Tik nesiūlykit frameworkų, vieną freimworkinę sistemą studijuoju dabar, bet reik kažko paprasto valdomo klasėmis be jokių freimworkų. Dizainas paprasčiausiai sukarpytas į gabaliukus, kurį reikia iškviesti vykdant php loginę funkciją.

Maždaug taip:

<?php
class front {
    public function 
dizainas($key) {
        return 
"<b><font color='red' size='5'>Mano raktas yra $key</font></b>";
    }
}
class 
alert {
    public function 
pavojus($key) {
        return 
"<b><font color='red' size='5'>Pavojaus! Skambink nr $key</font></b>";
    }
}

class 
boot extends front,alert {
    public function 
__construct() {
        echo 
$this->dizainas(554541145);
        echo 
$this->pavojus(112);
    }
    
}

$klase = new boot();
?>

Būtent šioje eilutėje yra klaida:  class boot extends front,alert.
4c61626173212

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: class extends daugiau nei vieną klasę
« Atsakymas #1 Įrašytas: 2014-04-24 12:35:22 pm »
siaip reiktu daryt taip:
Kodas: (php) [Pasirinkti]
<?php
class DoubleLinkedList implements CloneableSerializiable {
  
// etc..
}

Arba gali hackint kanors tokio, bet cia tikrai nepavadinciau "best practice":

Kodas: (php) [Pasirinkti]
<?php
class {
    public function 
method_from_b($s) {
    
echo $s;
    }
}

class 
{
    public function 
method_from_c($s) {
    
echo $s;
    }
}

class 
extends B
{
  private 
$c;

  public function 
__construct()
  {
    
$this->= new C;
  }

  
// fake "extends C" using magic function
  
public function __call($method$args)
  {
    
$this->c->$method($args[0]);
  }
}


$a = new A;
$a->method_from_b("abc");
$a->method_from_c("def");

dar vienas NOT good practice:

<?php
class 

class 
extends class 

class 
extends class 

// etc ...  

Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs justinas

  • Naujokas
  • *
  • Įrašai: 163
  • Karma: +16/-3
    • Žiūrėti profilį
Ats: class extends daugiau nei vieną klasę
« Atsakymas #2 Įrašytas: 2014-04-24 16:30:55 pm »
Traits.
http://www.php.net/manual/en/language.oop5.traits.php

Bet jei čia apskritai tikro kodo pavyzdys, tai nei čia OOP (nes iš esmės klasė traktuojama kaip tik funkcijų rinkinys), nei apskritai kokia gera praktika. Tam yra templeitų sistemos :)

Manualai.lt Forumas

Ats: class extends daugiau nei vieną klasę
« Atsakymas #2 Įrašytas: 2014-04-24 16:30:55 pm »