| 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("Pseudo parent $p nu este un
nume de clasa sau o instanta de clasa");
}
// 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 |
|
| |