Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Extinderea dinamica a unei clase
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
adix



Data înscrierii: 02/Oct/2007
Mesaje: 123

Trimis: Dum Aug 03, 2008 5:43 pm    Titlul subiectului: Extinderea dinamica a unei clase  

Salut.

Uite, lucrez de ceva vreme la proiectarea unui framework pentru un proiect mare, diferit, ciudat si provocator.

Momentan proiectam aplicatia, si ca de obicei, proiectarea imi cade mie in cap.

Ce vreau de fapt: sa extind o clasa dinamic, in timpul rularii scriptului.
Asadar, presupunem ca avem o clasa "main_class" si o alta clasa "do_something_class".

Intotdeauna am creata clasa "main_class", si la un moment dat, in functie de modul, am nevoie si de "do_something_class"

ce vreau sa fac este ceva in genul:
Cod: $main_class->load('do_something_class');

Ca urmare, toate membrele "do_something_class" devin accesibile prin $main_class

Precizez ca nu vreau do_something_class extends main_class.

Totul este gandit pentru eficienta, load time si consum de resurse.

Nu ne trebuie nici un fel de framework consacrat. Totul este de la zero (stipulat prin contract)....

Asadar, vreo idee? Am facut research, stiu ca este posibil, ce am gasit este varza insa, nu te duce unde vrei.

Cer ajutor pentru a scurta dn timpul rezolvarii problemei, sunt perfect competent sa gasesc o solutie, dar ar dura, si timpul, ehehe, timpul...

mandriva: STAI DEPARTE DE THREADUL ASTA.
Sus  
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 3001
Locație: țopăi pe tasta DELETE

Trimis: Dum Aug 03, 2008 6:07 pm    Titlul subiectului:  

Citat: Precizez ca nu vreau do_something_class extends main_class.
de ce? cum crezi ca optimizezi un script ocolind o solutie simpla? :)
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1762
Locație: Sibiu

Trimis: Dum Aug 03, 2008 6:16 pm    Titlul subiectului:  

Am o idee, dar trebuie sa mai studiez putin. Iti dau un raspuns maine daca nu te rezolva nimeni pana atunci.
Sus  
andrei009



Data înscrierii: 16/Mar/2007
Mesaje: 211

Trimis: Dum Aug 03, 2008 7:14 pm    Titlul subiectului:  

uite aici, am facut eu mai demult

do_something.php
Cod: class do_something {
    function ha(){
        echo 'ha';
    }
}


index.php
Cod: class main_class {
    function load($l){
        include $l.'.php';
        $this->$l = new $l;
    }
}

$main = new main_class;

$main->load('do_something');

$main->do_something->ha();



foloseam asta pentru a incarca clasele doar cand aveam nevoie de ele, sa nu le incarc pe toate la inceput

later edit: codul l-am scris acum, la metoda load ar trebui puse cateva if-uri, daca fisierul si clasa exista
http://php.net/file_exists
http://php.net/class_exists
Sus  
Amenthes



Data înscrierii: 12/Dec/2005
Mesaje: 577

Trimis: Dum Aug 03, 2008 9:15 pm    Titlul subiectului:  

Vezi daca te ajuta ce am zis aici:

http://phpromania.net/forum/viewtopic.php?t=15679

Later edit:

Ma indoiesc insa ca asa ceva se va comporta cum vrei tu ("Totul este gandit pentru eficienta, load time si consum de resurse."). Cand vrei lucruri asa dinamice, mai ai si de suferit, vezi Ruby. Si ar mai fi o problema, nu stiu cat de corect din punct de vedere OO este o asemenea abordare.
Sus  
adix



Data înscrierii: 02/Oct/2007
Mesaje: 123

Trimis: Lun Aug 04, 2008 8:49 am    Titlul subiectului:  

Initial am proiectat totul conform cu metoda lui andrei009.

Insa ma gandeam sa sharez membre dintre clase diferite prin intermediul aceluiasi container (main_class).

O solutie gasita este http://codingforums.com/showthread.php?t=100806. Si ar mai fi si in ZEND framework o chestie asemanatoare.

Intradevar, Amenthes, incarcarea claselor in modul asta nu e cea mai rapida, dar incarcarea unei clase o faci o singura data. Optimizarea de care vorbesc este la restul sistemului. Dela la sistemul de caching si query pana la modul de tratare a templateurilor.
Sus  
acid28



Data înscrierii: 04/Aug/2008
Mesaje: 1

Trimis: Lun Aug 04, 2008 10:00 pm    Titlul subiectului:  

Citat: Ce vreau de fapt: sa extind o clasa dinamic, in timpul rularii scriptului.

Daca asta e intr-adevar ce vrei sa faci (desi urmarind postul se pare ca de fapt nu asta vrei sa faci) ... raspunsul este Decorator pattern.

Citat: In object-oriented programming, the decorator pattern is a design pattern that allows new/additional behaviour to be added to an existing class dynamically
Sus  
Kine



Data înscrierii: 09/Aug/2008
Mesaje: 11

Trimis: Sâm Aug 09, 2008 6:55 pm    Titlul subiectului:  

O alternativa la ceea ce doresti sa faci este 'Factory pattern': sa incarci o clasa conditional (cam asa lucreaza PDO-ul de la PHP) prin intermediul altei clase.

Pentru mai multe detalii: (cauta Factory pe Wikipedia) - am vrut sa dau link, dar se pare ca inca nu indeplindesc toate criteriile.

Zend framework foloseste un astfel de pattern pentru returnarea unei instante catre o conexiune cu o baza de date.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community