[ 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: 3971
Témy: 181 | 181
Bydlisko: Nitra / Bra...
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: 3971
Témy: 181 | 181
Bydlisko: Nitra / Bra...
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

505

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

622

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

467

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

2428

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

515

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

303

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

531

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

257

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

513

05.11.2007 9:04

sento

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

User Class

v Redakčné systémy

3

360

06.07.2007 7:02

masterdead

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

class PHPMailer

v PHP, ASP

3

182

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

415

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

334

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

971

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

606

10.09.2009 16:35

Fico



© 2005 - 2018 PCforum, edited by JanoF