Janoz schreef op woensdag 21 februari 2007 @ 09:55:
Je haalt hier 2 dingen door elkaar. Ik heb het idee dat je overerving probeert te gebruiken, terwijl je eigenlijk een soort boom structuur wilt maken. Wat je goed moet beseffen is dat je bij overerving niet over verschillende objecten praat, maar over het steeds verder specialiseren van 1 specifiek object.
Ok, dat snap ik. Wat ik eigenlijk wil bereiken is dat een variabele toegankelijk is voor verschillende childs.
Het parent object handelt statistieken af, en verschillende childs doen de queries en berekeningen e.d. voor specifiek stats per dag, per uur, per browser, per pagina etc. Allemaal hebben ze eenzelfde variabele nodig, dus ik dacht: die zet ik in de parent en dan haal ik die "gewoon" op.
Wat jij hier aan het doen bent is in je parent object een 2e class maken die je child noemt. Daar is helemaal niks mis mee, maar heeft niks met overerving te maken. Wil je dat in je child bekend is wat de parrent is dan moet je de child een constructor geven zodat je de parent door kunt geven of een setter gebruiken.
Ik zit nu in de child met dit
PHP:
1
2
3
4
5
6
7
8
9
10
| class child{
var $parent;
function child(){
$this->parent = get_parent_class($this);
}
function display(){
echo $this->parent->foo;
}
} |
Zo kan ik dus als het goed is wel de toegang hebben tot foo?
Jups, thuis draai ik php5, maar ik wil het graag php4 compatible houden. Foutmeldingen zijn dus wel in php5, dat klopt.
Verder denk ik dat je probleem ligt in een verkeerd begrip van inheritance. Het parent keyword wijst naar een klasse waar de huidige op extend, niet een object. Je kunt het toepassen om expliciet een constante of methode aan te roepen uit de parent.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| class parentClass {
public function whoami() {
echo 'parent' ."\n\n";
}
}
class childClass extends parentClass {
public function whoami() {
echo 'child' ."\n\n";
}
public function whosMyDaddy() {
echo parent::whoami() ."\n\n";
}
}
$p = new parentClass();
$p->whoami(); //parent
$c = new childClass();
$c->whoami(); //child
$c->whosMyDaddy(); //parent |
Ik snap hoe het zit met functies. Daar staan namelijk wél voorbeelden van in de manual. Kennelijk is het wat lastiger met variabelen. Ik zit wat te rommelen in mn code, maar volgens mij kan dit dus ook (of zit ik nu verkeerd te denken?):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class parentClass {
function parentClass() {
$this->variable = "apple";
$this->child = new childClass();
}
}
class childClass extends parentClass {
function get_parent_apple() {
echo parent::variable;
}
}
$p = new parentClass();
$p->child->get_parent_apple(); //apple |