Wanneer een Class gebruiken
Ik programmeer al 20 jaar en heb reeds behoorlijke platformen draaien, maar nog niet OOP.
Ik ken de theorie, weet wat een class en object is, constructor en destructor, private en public, enz...
Nu vind ik persoonlijk de aanzet tot OOP niet eenvoudig.
Bestaat er een website met enkele basis regels of iets dergelijks van wat in een class te steken, wnr een class te gebruiken, ...
Of kunnen jullie me hier wat tips geven daaromtrent?
https://www.google.com/search?q=php+class+tutorial
Kwam ik o.a. dit tegen :
https://www.w3schools.com/php/php_oop_classes_objects.asp
Altijd zou ik dan bijna willen roepen. Maar ik weet ook dat het inderdaad erg abstract is en daardoor best lang kan duren eer het lampje gaat branden. Probeer eerst eens het verschil uit te zoeken (helder te krijgen) tussen een class (de code) en een instantie van een class (ergens in het geheugen van de pc).
En dan kun je dus:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
require(__DIR__ . '/../vendor/autoload.php'); //autoloader laden; de enige "include" die je hoeft te doen
\Helpers::fooBar(); //kijk mam, zonder include!
?>
require(__DIR__ . '/../vendor/autoload.php'); //autoloader laden; de enige "include" die je hoeft te doen
\Helpers::fooBar(); //kijk mam, zonder include!
?>
Een classe kun je het beste zien als een vorm die je helpt om dingen te structureren. Welke structuur en samenhang je daarna het beste kunt creëren met deze classen is natuurlijk afhankelijk van wat je probeert te bereiken. Ik heb zelf best moeite met het idee dat je daarbij aan allerlei 'regels' moet voldoen. Ik zie programmeren als een creatief vak.
Wel zijn er natuurlijk structuren die zich over tijd hebben bewezen. Daarom zijn ze zinvol om te hergebruiken. Hierbij is het wel zaak dat je eerst goed begrijpt waarom een specifieke structuur zo goed werkt en in welke specifieke situatie. Ook is het belangrijk te begrijpen welke beperkingen de toepassing ervan met zich meeneemt.
Deze bewezen structuren worden ook wel 'design patterns' genoemd. De onderstaande link beschrijft verschillende van deze patronen, wanneer ze in te zetten en wat de beperkingen zijn. Het is aan te raden verschillende sites te raadplegen om een goed beeld te krijgen.
Cheers en groet, Donuts.
https://sourcemaking.com/design_patterns
Gewijzigd op 29/12/2019 14:15:49 door DonutsNL Donut
See the posts above. :-)
OOP heeft nadelen, zoals het 'diamond problem' (niet in PHP), en grotere en langzamere code vanwege overerving, terwijl meestal niet alles gebruikt wordt.
Er is bijvoorbeeld een reden waarom besturingssystemen niet in C++ worden geschreven, maar in C.
Een ander mooi voorbeeld is de taal Rust, die onder meer Behavioural Programming ondersteunt, met traits als type van argumenten van functies. Er zijn dus vele mogelijkheden.
Terug naar PHP, waar een singleton een veelgebruikt patroon is voor een verbinding met een databank. Dit antipatroon (althans, voor OOP) bewijst dat niet alles in OOP hoeft. Voor php-fpm, waarin de typische setup is dat een programma een enkele thread heeft, en bij elk HTTP request opnieuw wordt uitgevoerd, is OOP eigenlijk niet nodig. Een voorbeeld is de PHP code van het project MantisBT.
Toch wordt OOP wel veel gebruikt, en worden lapmiddelen als traits gebruikt om enkele nadelen van OOP te verhelpen. Je kunt in PHP zelfs asynchroon programmeren via een soort promises, met de nieuwe feature van generators. Een raamwerk hiervoor is AMPHP.
Dus wanneer moet je wel of geen class gebruiken? Met PHP is er geen noodzaak, het kan allebei. Als je classes gebruikt zijn er wel veelgebruikte tools om je programmeren in een goede richting te helpen, zoals unit testen (je moet dan nog steeds integratietests doen). Aan de andere kant is er gedoe met dependency injection, en zijn er allerlei manieren om dat enigszins elegant op te lossen.
Ik heb dus geen goed antwoord op de vraag. Zelf programmeer ik wel via OOP, maar ik loop tegen de nadelen aan, zoals dat je zeker in PHP code kunt gaan zien als data, en gaat uitlezen via Reflection, wat hele trage code oplevert. OOP in PHP maakt mijns inziens de code minder makkelijk te porteren naar een andere taal, omdat OOP in PHP zijn eigen vorm heeft.
Als ik nu opnieuw OOP zou moeten mogen leren, dan zou ik voor Rust gaan.
Gesloten na spamkick.