Archief - PHP: constructor overloading

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

v1sioNz

Legacy Member
Momenteel ben ik aan een klein project bezig waarin ik onder andere gebruik maak van PHP. Het is de eerste keer dat ik Object-Georiënteerd werk met PHP en ik zit namelijk met een vraag:

PHP laat het overloaden van constructors in een klasse niet toe. Dit betekent dat je maximaal 1 constructor per klasse hebt. Bij het aanmaken van een object van een klasse kan het best voorvallen dat ik een verschillend aantal parameters heb. Wat is de beste manier om dit te 'omzeilen' (misschien een verkeerde woordkeuze, but you catch my drift...)?

Hoe ik het momenteel doe: ik maak geen gebruik van een constructor. Eerst maak ik een 'leeg' object aan en vul het vervolgens met behulp van setters.

Graag zou ik willen weten of dit wel een goede manier is of hoe andere mensen dit aanpakken.

KevinMa

Legacy Member
Code:
class FooBar {
	public function __construct(foo = null, bar = null) {
		// ...
		}
}

fooOne = new FooBar();
fooTwo = new FooBar("foo");
fooThree = new FooBar("foo", "bar")'

v1sioNz

Legacy Member
Thanks voor de respons, zijn inderdaad interessante oplossingen welke ik zeker ga toepassen. Enige voordelen/nadelen tussen de twee?

dJeez

Legacy Member
Het nadeel van de boven genoemde methodes is dat je in het eerste geval een vuilbak aan parameters krijgt en in het tweede geval niet eens duidelijk ziet wat de verschillende constructors nu wel zijn (hoewel je ze wel in verschillende functie calls kan afsplitsen zoals in het voorbeeld).

Eigenlijk is de meest propere oplossing imho wel het gebruik van static functies die een referentie naar het object teruggeven. Dus eigenlijk +/- de eerste werkwijze zoals je beschreef, maar dan wel met verschillende static functies die het object via setters correct invullen zoals je wil. Een dom voorbeeld uit de PHP docs : http://www.php.net/manual/en/language.oop5.decon.php#66288

Maar bij static functies kan je dus wel tegen late static binding problemen aanlopen (cfr. http://c7y.phparch.com/c/entry/1/art,late_static_bindings/0).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan