[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.01.08
Prihlásený: 01.06.17
Príspevky: 25
Témy: 6 | 6
NapísalOffline : 20.03.2010 15:30 | Metody a class extend

Mam taku, dufam, jednoduchu otazocku.

Predstavte si, ze mate takuto strukturu...

Kód:
class alfa {
  function a() {
    // bla bla
  }
}

class beta extends alfa {
  function b() {
    // bla bla
  }
  function c() {
    // bla bla
  }
  function d() {
    // bla bla
  }
}

class gama extends beta {
  function test() {
    // bla bla
  }
}



Takto nejako vyzera struktura (velmi zjednodusena) toho s cim pracujem. Pricom class alfa je rootovska trieda.

Prisiel som do stadia, kde "class gama" je len plugin, ktory rozsiruje "class beta". Je mi jasne, ze na to aby som zavolal metodu test musim napisat:

Kód:
$gama = new gama();
$gama->test();


Gama, ma vsetky metody tried, ktore rozsiruje.. to je jasne. Ale kedze gama je len plugin, snazim sa prist na sposob, ktory by mi dovolil zavolat metodu test z triedy "beta". Cize inak povedane, aby trieda "beta" mala aj metody z gamy.

Snad som sa vyjadril zrozumitelne :lol:

Kód:
$beta = new beta();
$beta->test();


Musi sa to momentalne rozdelit na pluginy, kedze 4000 riadkov je dost neprehladnych, najme ak na jeden projekt stacia 2 funkcie a iny 20, atd.

:)


Offline

Užívateľ
Užívateľ
Metody a class extend

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 21.03.2010 19:52 | Metody a class extend

Tu máš takú srandičku, keď som ja toto riešil. Tiež z hodou náhod dnes :D

Kód:
<?php
abstract class dusa{#tato trieda moze byt prazdna..
  function pl(){
    echo 'citenie';
  }
}
$lastclass = 'dusa';
$Dir = './plugins/';
$Plugins = scandir($Dir);
unset($Plugins[0], $Plugins[1]);
foreach($Plugins as $Plugin){
  require $Dir.$Plugin;
  eval($toeval);
}

$toeval = <<<EOT
  class clovek extends $lastclass{
EOT;
$toeval .= <<<'EOT'
  #sem das obsah tvojej hlavnej triedy
  }
EOT;
eval($toeval);

$c = new clovek;
$c->pl(); #citenie
$c->pl1(); #rozmyslanie
$c->pl2(); #chodenie
?>


v priečinku plugins už budeš mať príslušné triedy

plugin1.php
Kód:
<?php
$toeval = <<<EOT
  abstract class hlava extends $lastclass{
EOT;
$toeval .= <<<'EOT'
  function pl1(){echo 'rozmyslanie';}}
EOT;

$lastclass = 'hlava';
?>


plugin2.php
Kód:
<?php
$toeval = <<<EOT
  abstract class nohy extends $lastclass{
EOT;
$toeval .= <<<'EOT'
  var $Funkcia = 'chodenie'; function pl2(){echo $this->Funkcia;}}
EOT;
$lastclass = 'nohy';

?>


neviem, či je to práve najšťastnejšie riešenie, ale malo by správne fungovať. Kódy do evalu môžeš dávať aj normálne do stringu medzi apostrofy, ale potom ti nebude syntax zvýrazňovať editor...

Ja by som skôr chcel niečo typu

Kód:
$HlavnaTrieda->NazovPluginu->funkciaPluginu();


lenže v triedach nie som ešte zabehnutý, takže neviem ako na to :/


_________________
Sorry za prelkepy
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.01.08
Prihlásený: 01.06.17
Príspevky: 25
Témy: 6 | 6
Napísal autor témyOffline : 21.03.2010 21:12 | Metody a class extend

Diky az odpoved.

A rozmyslal som ci tam napisem, ze abstraktne classy nemozem pouzit :P Vzhladom na to ako funguje framework, tak to nie je mozne, vyriesil som to nakoniec vylepsenim inej casti frameworku :)

P.S. a eval naozaj nie je dobre pouzivat :)


Offline

Užívateľ
Užívateľ
Metody a class extend

Registrovaný: 26.12.06
Prihlásený: 30.10.17
Príspevky: 4009
Témy: 181 | 181
Bydlisko: Nitra / Bra...
Vek: 24
NapísalOffline : 22.03.2010 21:06 | Metody a class extend

ked nemozes vyuzivat abstraktne, tak to jednoducho daj prec a hotovo.

preco nie je dobre pouzivat eval? :)


_________________
Sorry za prelkepy
 [ Príspevkov: 4 ] 


Metody a class extend



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

MicroSDHC class 2 alebo class 4 mám vrátiť ?

v Pamäte

3

494

16.12.2010 20:09

majky358

V tomto fóre nie sú ďalšie neprečítané témy.

Extend rank color

v Redakčné systémy

10

607

16.02.2007 20:55

sadam

V tomto fóre nie sú ďalšie neprečítané témy.

extend rank color

v Redakčné systémy

9

452

30.03.2007 10:22

Flety

V tomto fóre nie sú ďalšie neprečítané témy.

PREKLAD: Extend merge CZ

v Redakčné systémy

0

2411

12.11.2006 16:55

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

alternativne metody chladenia

v Chladiče a všetky druhy chladenia

11

502

12.03.2009 16:52

tommy1104

V tomto fóre nie sú ďalšie neprečítané témy.

Unit testy privatne metody

v Kôš

1

64

04.09.2016 14:46

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Java - spustenie metódy len na určitý čas

v Assembler, C, C++, Pascal, Java

1

283

09.11.2009 23:19

stopa27

V tomto fóre nie sú ďalšie neprečítané témy.

Staticke metody v OOP a kedy ich pouzit

v PHP, ASP

1

513

28.12.2010 18:47

Forty-

V tomto fóre nie sú ďalšie neprečítané témy.

C++ Preťaženie metody pri dedení - mám to dobre?

v Assembler, C, C++, Pascal, Java

10

201

08.03.2017 19:04

globalik

V tomto fóre nie sú ďalšie neprečítané témy.

dekompilaccia class

v Assembler, C, C++, Pascal, Java

1

499

05.11.2007 9:04

sento

V tomto fóre nie sú ďalšie neprečítané témy.

class PHPMailer

v PHP, ASP

3

165

30.09.2012 12:19

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

User Class

v Redakčné systémy

3

343

06.07.2007 7:02

masterdead

V tomto fóre nie sú ďalšie neprečítané témy.

user class

v Redakčné systémy

3

398

14.04.2007 13:03

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

User Class

v Redakčné systémy

2

324

12.03.2007 14:51

koudy

V tomto fóre nie sú ďalšie neprečítané témy.

C++ class

v Assembler, C, C++, Pascal, Java

16

956

13.11.2010 12:32

ado21

V tomto fóre nie sú ďalšie neprečítané témy.

Delphi class

v Delphi, Visual Basic

1

590

10.09.2009 16:35

Fico



© 2005 - 2017 PCforum, edited by JanoF