[ Príspevkov: 4 ] 
AutorSpráva
Offline

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

Registrovaný: 17.01.08
Prihlásený: 24.09.20
Príspevky: 27
Témy: 7 | 7
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ý: 16.11.19
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ý: 24.09.20
Príspevky: 27
Témy: 7 | 7
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ý: 16.11.19
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

761

16.12.2010 20:09

majky358

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

extend rank color

v CMS

9

713

30.03.2007 10:22

Flety

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

Extend rank color

v CMS

10

995

16.02.2007 20:55

sadam

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

PREKLAD: Extend merge CZ

v CMS

0

2683

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

834

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 Backend

1

552

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 Backend

1

788

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 Backend

10

701

08.03.2017 19:04

globalik

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

dekompilaccia class

v Backend

1

731

05.11.2007 9:04

sento

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

class PHPMailer

v Backend

3

401

30.09.2012 12:19

shaggy

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

User Class

v CMS

3

571

06.07.2007 7:02

masterdead

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

C++ class

v Backend

16

1281

13.11.2010 12:32

ado21

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

User Class

v CMS

2

552

12.03.2007 14:51

koudy

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

Delphi class

v Ostatné

1

900

10.09.2009 16:35

Fico

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

[VYRIESENE] template class

v Backend

16

1222

08.02.2009 18:54

Unlink



© 2005 - 2026 PCforum, edited by JanoF