Properties beschikbaar bij publieke aanroep in parent class ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Toine vd P

Toine vd P

17/09/2009 13:14:00
Quote Anchor link
Beste PHP'ers.

stel;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
class A {

  public function geefIets() {
    # pass
  }

}

?>



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
class B extends A {

  var
$iets = 'test';

}

?>


Hoe kan ik vanuit class A, property "iets" aanspreken ?
Ik heb al gespeeld met een static declaratie en een publieke, maar het mocht niet baten.

-als het mogelijk is- hoe ?
-en er zijn meerdere mogelijkheden- wat is de beste keuze en waarom ?

Groet,

Twan van der Poel
 
PHP hulp

PHP hulp

29/03/2024 07:51:43
 
- wes  -

- wes -

17/09/2009 13:26:00
Quote Anchor link
kijk even naar wat wat extent, moet je al een heel eind komen

punt de
 
Toine vd P

Toine vd P

17/09/2009 13:36:00
Quote Anchor link
wes, ten eerste bedankt voor je reactie.

De uiteindelijke bedoeling is dat er 1 datamodel class komt die huis-tuin en keuken database-mutaties doorvoert.

stel class A is Datamodel en class B is b.v. menuitem

dan heeft class menuitem een variabel $tabel en $pri_key.

Vervolgens wil ik een publieke getAll() functie kunnen aanroepen in de datamodel class.

Dus als menuitem non-generieke query's nodig heeft defineer ik in class Menuitem

public function getAll(){
# doe specifieke. dingen geef terug
}

MAar als het een normale alles ophaal actie is, laat ik de functie achterwege en doe ik alsnog $items = Menuitem::getAll();

Deze wordt vervolgens aangeroepen in de Datamodel class.

maar die getAll() functie in de Datamodel class heeft wel de properties tabel en pri_key nodig van de class Menuitem;

Grt,

-----------------------------------------------------
even een edit om het weer onder de aandacht te brengen;
-----------------------------------------------------

de vraag is dus netto;

als ik B:getAll(); uitvoer, hoe kan ik dan in class A de property "iets" aanspreken
Gewijzigd op 01/01/1970 01:00:00 door Toine vd P
 
Toine vd P

Toine vd P

17/09/2009 14:38:00
Quote Anchor link
Iemand suggesties ?
 
Toine vd P

Toine vd P

18/09/2009 10:12:00
Quote Anchor link
....
 
Bo az

Bo az

18/09/2009 10:40:00
Quote Anchor link
Door gebruik te maken van de magic methods __get en __set ?

Op die manier zou je zelfs helemaal geen properties hoeven te declareren maar zou je intern een array kunnen gebruiken.
 
Toine vd P

Toine vd P

18/09/2009 11:01:00
Quote Anchor link
Boaz, ten eerste bedankt voor je reactie.

Het betreft hier een statische aanroep op de class B, als we dus iets toekennen aan B met b.v. magic method __set kunnen we helaas niet de child-class aanspreken of interne waarden van B aanspreken.

Vanaf PHP 5.3.0 kunnen we gebruik maken van Late static bindings -wat de oplossing zou bieden- echter kan ik geen debian package vinden hiervoor. (of de package is van een obscure website)

fyi; @see http://nl3.php.net/manual/en/language.oop5.late-static-bindings.php

kun je jouw post uitwerken tot een klein voorbeeld conform de code in mijn 1e post ?
 
Bo az

Bo az

18/09/2009 11:47:00
Quote Anchor link
Sorry, mijn gedachte gang was fout, ik begrijp nu idd wat jij bedoeld.

Helaas, een echte oplossing weet ik niet. Wat je zou kunnen doen is geen gebruik van static maken, het is minder netjes/mooi, maar werkt wel.
 
Toine vd P

Toine vd P

18/09/2009 11:56:00
Quote Anchor link
Boaz wederom dank voor je reactie

Helaas vind ik eerst een instance maken -zoals je zelf aangeeft- een workarround en geen oplossing. Het zou mij ook vreselijk veel tijd kosten om dit allemaal aan te passen. Daarnaast zou de opzet juist rapid core development moeten realiseren.

Heeft iemand nog suggesties? alles is welkom.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.