class constanten gebruiken in verschillende classess
Ben met een projectje bezig waarin ik bepaalde types wil vastleggen in constanten.
Maar ben nog niet zo heel lang bezig met OOP, dus ben op zoek naar de mooiste/beste oplossing.
het gaat globaal om de volgende situatie:
Ik heb de volgende classess :
- ClassObject : In deze class wordt gewoon een class gedifineerd, dus een class heeft Members en Methodes. deze worden in arrays bewaard.
-ClassMembers: hierin worden de Members gedefineerd, dus MemberName,Het Type van de member(bv:string,integer,object,etc),etc
-ClassMethodes: hierin worden de Methodes gedefineerd en bevat ook een array met parameters.
-MethodParaMeters: hierin worden de parameters gedefineerd.
Bovenstaande is heel kort en beknopt, maar hoop wel dat het inzichtelijk is.
Wat bv. wel duidelijk is dat zowel een Classmember als een classmethode een AccessType heeft(public,private,protected), deze wil ik nu vast leggen in een constante bv. ACCESSTYPE_PUBLIC.
Maar wat is nu een goede plaats .
Gewoon in de class ClassObject omdat een class bestaat uit members en methodes, dus met classconstanten.
of is het mooier om er een soort configje(bv genaamd AccessTypes.php) naast te hebben waarin we de constanten gewoon defineren .
Heb ook nog even gedacht om er een abstract clasje bij te maken, maar dit lijkt me niet goed idee omdat de functionaliteit ontbreekt.
Hetzelfde probleem doet zich voor bij de variabelenTypes(string,integer,object,etc), want zo heeft een classmember een type maar ook een methode parameter.
hoop dat jullie me een beetje begrijpen waar ik naar toe wil en dat er een mooie oplossing uit komt.
met vriendelijke groet
Ben je OOP in OOP aan het maken ofzo?
Je maakt toch gewoon in een classe een methode aan en je wilt toch niet methoden bewaren in een array en zo?
Als je naar PHP zelf kijkt, en dan bijvoorbeeld naar PDO, dan zie je dat zij deze class meteen als namespace voor hun constanten gebruiken (PDO::FETCH_ASSOC, welke je gebruikt in PDOStatement) en dat zou je kunnen doen, al weet ik niet wat bij jouw die meest bovenliggende class is.
De vraag is misschien een beetje dom gesteld, Maar ik ben geen OOP in OOP aan het maken hoor.
Ik sla Mijn UML classdiagrams op als xml, deze wil ik dan uitlezen met php en zo mijn classdefinities en standaardcommentaar uit laten schrijven. De genereerde bestanden laad ik dan in mijn php editor. Zo heb ik weer wat typ werk uitgespaard en hoef ik enkel de methodes nog uit te werken en daarnaast is het een mooie leuke programeer oefening, voor een beginner.
maar jelmer schitterend voorbeeld haal je aan. Zo iets bedoel ik ook.
Nu heb ik het als volgt.
Nu gebruik ik twee verschillende constanten op de vo;gende manier.
In de class ClassMember heb ik een constante gedefineerd,
ACCESSTYPE_PRIVATE, deze roep ik waar dan ook als volgt aan ClassMember::ACCESSTYPE_PRIVATE.
In de class ClassMethod heb ik ook een constante ACCESSTYPE_PRIVATE gedefineerd, de aanroep van deze is dan vanzelfsprekend ClassMethod::ACCESSTYPE_PRIVATE
De meest bovenliggende class is de class Package waarin objecten zitten van het type ClassObject,waarin weer objecten zitten van het type ClassMembers & ClassMethods, etc
Dus waar is het netste?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL | E_STRICT);
class parentClass {
const MA = 1;
const DI = 2;
}
class childClass extends parentClass {
}
echo childClass::MA;
?>
ini_set ('display_errors', 1);
error_reporting (E_ALL | E_STRICT);
class parentClass {
const MA = 1;
const DI = 2;
}
class childClass extends parentClass {
}
echo childClass::MA;
?>
Dat is de kern van mij vraag, namelijk dat ik mijn constanten 2x moet defineren. De Reden dat ze niet in de parent class staan is omdat, die er domweg niet is .
De enige relatie tussen de classes is compositie.
Ontwerp foutje??