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
 

newclass extends $oldclass ??????????
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
H-ash



Data înscrierii: 07/Aug/2007
Mesaje: 2

Trimis: Mie Iun 04, 2008 11:55 am    Titlul subiectului: newclass extends $oldclass ??????????  

daca s-a mai lovit cineva de asa ceva vreodata si poate sa ma ajute, e binevenit :lol:

practic, intrebarea e daca pot extinde o clasa al carei nume il am stocat intr-o variabila. :wink:
Sus  
mihaitha



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

Trimis: Mie Iun 04, 2008 12:22 pm    Titlul subiectului:  

adica ceva de genul <?   class copil extends $parent {      //...   } ?>? Nu.
Sus  
vectorialpx



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

Trimis: Mie Iun 04, 2008 1:48 pm    Titlul subiectului:  

dar, poti folosi un eval... desi, nu e prea ortodox
Sus  
H-ash



Data înscrierii: 07/Aug/2007
Mesaje: 2

Trimis: Mie Iun 04, 2008 2:02 pm    Titlul subiectului:  

@mihaitha: stiam ca nu merge de la inceput, am incercat in prealabil; cautam o solutie alternativa. :)
@vectorialpx: am incercat si cu eval si tot nu vrea; din cate stiu dupa "extends" vrea doar un string, nimic altceva; speram totusi sa fie o posibilitate sa il "pacalesc" :P
Sus  
mihaitha



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

Trimis: Mie Iun 04, 2008 2:07 pm    Titlul subiectului:  

La ce iti trebuie mai exact? Da si tu mai multe detalii, poate gasim o solutie asa.
Sus  
crivion



Data înscrierii: 10/Apr/2007
Mesaje: 677
Locație: Somewhere

Trimis: Mie Iun 04, 2008 2:40 pm    Titlul subiectului:  

ma bag si eu in seama chiar daca habar nam cei cu mine da incearca sa dai define un cuvant = variabila ta si dupa class cuvant extends ds;alkd;sa
Sus  
Amenthes



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

Trimis: Joi Iun 05, 2008 10:45 am    Titlul subiectului:  

Nu va merge nici cu define.

Mai bine regandesti design-ul. Adica in loc sa folosesti mostenirea, folosesti
compozitia (favor composition over inheritance).

Nu stiu exact ce vrei dar ai putea sa faci asa:

<?php class A {     /**      * Va fi obiectul determinat in self::setPseudoParent()      * @var mixed      */     protected $_pseudoParent;     /**      * $pseudo_parent poate fi numele unei clase sau chiar o instanta a clasei      * respective      *      * @param $pseudo_parent mixed      */     public function __construct($pseudo_parent)     {         $this->setPseudoParent($pseudo_parent);     }          public function setPseudoParent($p)     {         if (is_object($p)) {             // poti face o verificare ce clasa a instatiat obiectul             if ($p instanceof SomeOtherClass) {             } elseif ($p instanceof SomeOtherClass) {                          }                      } elseif (is_string($p)) {             // incerci sa gasesti clasa al carei nume e reprezentat prin stringul $p             // si instatiezi un obiect din ea         } else {             throw new RuntimeException(&quot;Pseudo parent $p nu este un                                         nume de clasa sau o instanta de clasa&quot;);         }                  // in final ar trebui sa setezi         $this->_pseudoParent = $p;     }          // cum poti face override     public function foo1($param)     {         // adaugi ceva bar la $param         $param .= 'bar';                  // si in final apelezi foo() din pseudoParent                  return $this->_pseudoParent->foo($param);     }          // sau          // cum poti face override     public function foo2($param)     {         // mai intai apelezi foo() din pseudoParent                  $val = $this->_pseudoParent->foo($param);                  // apoi post procesezi $val         return $val . 'bar';     }          // acolo unde nu vrei sa faci override poti face asa     public function __call($method, $arguments)     {         $callback = array($this->_pseudoParent, (string)$method);         return call_user_func_array($callback, $arguments);     }          // sau asa          public function moreFoo()     {         // fara nici un fel de pre- sau post-procesare         return $this->_pseudoParent->moreFoo();     }          // daca ai proprietati publice sau getter/setter magic in pseudoParent      //atunci s-ar putea sa vrei sa folosesti si __get si __set     public function __get($property)     {         $this->_pseudoParent->$property;     }          public function __set($property, $value)     {         $this->_pseudoParent->$property = $value;     } } ?>
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