PHP class dingen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bryan De Baar

Bryan De Baar

18/07/2019 20:40:09
Quote Anchor link
Hallo,


Graag zou ik wat dingen willen weten over php classes.
Ik noem de class even 'forum'


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
//Elk nieuwe class begin je met lege variabele en worden gevuld met data welke je wilt verwerken.
//eigenlijk init je alles bij het starten van een nieuwe class?

new forum($ditmoetverwerktworden);
?>


- De verschillen tussen private, public, protected.
- Wat doet construct?

Wie oo wie kan mij opweg helpen?
 
PHP hulp

PHP hulp

28/03/2024 13:13:46
 
Adoptive Solution

Adoptive Solution

18/07/2019 20:50:57
 
- Ariën  -
Beheerder

- Ariën -

18/07/2019 20:53:17
Quote Anchor link
Begin wel bij hoofdstuk 1 ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

18/07/2019 23:25:36
Quote Anchor link
Vergeet niet dat classes en OOP een middel zijn, geen doel. PHP is een hybride programmeertaal, dus je hoeft niet alles (en al helemaal niet enkel "voor de vorm") om te schrijven naar een object georiënteerde variant. Het is een stuk gereedschap. De klus bepaalt welk gereedschap je hiervoor gebruikt, en niet andersom.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/07/2019 00:29:09
Quote Anchor link
Wat Thomas nu zegt dat lees ik vaker maar ik vraag me toch een beetje af waar dit vandaan komt. Komt de van de oude rotten die geen zin hebben om nog OOP te leren? Ik vindt OOP namelijk wel een veel beter middel dan Procedural om maar even in jouw termen te blijven. Het helpt je enorm bij het onderverdelen van verantwoordelijkheden, de leesbaarheid van je code en ook bij het schrijven van herbruikbare code. Daarnaast zit je met het feit dat bijna elk framework tegenwoordig OOP georiënteerd is. En een framework daar krijg je vroeg of laat mee te maken. Natuurlijk hoef je geen OOP te gebruiken als je webpagina slechts vijf regels PHP bevat maar al snel ga je naar enkele honderden of duizenden regels en dan wordt het wel heel iets anders. Wil je bovendien gebruikmaken van bestaande opensource php classes/libraries dan is OOP ook niet te vermijden. Wil je OOP leren pak dan ook direct de autoloaders (PSR0 / PSR4) mee en kijk eens wat Composer voor je kan betekenen...
 
Thomas van den Heuvel

Thomas van den Heuvel

19/07/2019 03:20:40
Quote Anchor link
Het is meer de notie dat dingen niet zonder OOP zouden kunnen. Natuurlijk, als je grotere projecten hebt waarbij mogelijk verschillende mensen code ontwikkelen of in geval van een specifiek probleem kan OOP wellicht een betere aanpak zijn, maar zoals gezegd is PHP een hybride taal, dus je hoeft je niet per se het OOP keurslijf aan te meten. Wel zou je op den duur een gevoel moeten ontwikkelen voor wanneer iets handiger is. Zoals gezegd, het is een stuk gereedschap. Maar om nu op voorhand te zeggen dat je voor elke klus een schroevendraaier moet gebruiken is natuurlijk de omgekeerde wereld. Toch lastig als je de heg moet trimmen dan. Dan is een (elektrische) heggenschaar misschien toch handiger.

En dan zijn er dus ook situaties waarin men krampachtig dingen in een OOP-vorm wil gieten terwijl dat helemaal niet nodig is. Waarom zou je deze extra moeite nemen en je het jezelf moeilijk maken? Soms is procedureel gewoon goed genoeg en zou een OOP-aanpak gewoon veel te omslachtig zijn. En je hebt in PHP de ruimte om het "beste" van beide werelden te combineren. Maak het jezelf vooral makkelijk. Dat is ook een dingetje waar aan voorbij wordt gegaan: complexiteit. OOP maakt dingen tegelijkertijd makkelijker maar ook (niet zozeer moeilijker maar zeker) complexer. Hiermee creëer je dus ook een potentiële kostenpost.

Als je dan toch met OOP aan de slag wilt (zonder wat voor motivatie dan ook... wat eigenlijk nogal slecht is) verlies dan vooral het praktische aspect niet uit het oog. Vaak is het niet een kwestie van "onze eindconclusie is dat we het nodig hebben voor X" maar meer "we hebben bedacht dat we het voor X nodig hebben gaan gebruiken". Dat is nogal een verschil. Alsof een manager een buzzword heeft gehoord en iedereen om moet. Zonder wat voor motivatie dan ook.

Als een of andere smaakpolitie besluit dat alles in OOP moet... I don't know man. Mijn eerste vraag zou dan zijn: waarom? Alle technische (ontwerp)beslissingen zouden ergens op gebaseerd moeten zijn. Ik zou dus op zijn minst een motivatie verwachten voor wat voor aanpak dan ook, maar een aanpak niet op voorhand uitsluiten, dat lijkt mij gewoon stupide.

Persoonlijk maakt het mij geen biet uit wat je gebruikt, zolang je maar kunt uitleggen waarom je iets gebruikt. En als je dat niet kunt, dan maakt het ook echt helemaal niets uit wat je doet omdat het dan letterlijk nergens op gebaseerd is.
Gewijzigd op 19/07/2019 15:28:05 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/07/2019 15:48:28
Quote Anchor link
Ik ga voor 99,9% met je mee hoor Thomas maar ik zou toch willen onderstrepen dat het leren van OOP zeker wél zinvol is. Toch even de concrete vraag van TS proberen te beantwoorden:

public: Public class variabelen (properties) en public class functies (methods) kunnen binnen de class, binnen afgeleiden classes en buiten de class aangeroepen/gebruikt worden.

protected: Protected class variabelen (properties) en protected class functies (methods) kunnen binnen de class, binnen afgeleiden classes maar niet buiten de class aangeroepen/gebruikt worden.

private: Private class properties en methods kunnen enkel door de class zelf aangeroepen/gebruikt worden.



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php

class A {
    public $var1;
    protected $var2;
    private $var3;
}


class B extends A {
    private $var3; // private properties kunnen niet overgeërfd worden dus declareer ik netjes een nieuwe private var3 voor deze class

    public function setVar1($var) {
        $this->var1 = $var;
    }

    public function setVar2($var) {
        $this->var2 = $var;
    }

    public function setVar3($var) {
        $this->var3 = $var;
    }
}


$a = new A();

$a->var1 = "test";
$a->var2 = "test"; // ERROR: Cannot access protected property A::$var2
$a->var3 = "test"; // ERROR: Cannot access private property A::$var3



$b = new B();

$b->var1 = "test";
$b->var2 = "test"; // ERROR: Cannot access protected property B::$var2
$b->var3 = "test"; // ERROR: Cannot access private property B::$var3

$b->setVar1("Cool1");
$b->setVar2("Cool2");
$b->setVar3("Cool3");
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

20/07/2019 22:03:12
Quote Anchor link
Het leren van OOP is zeker zinvol. Zolang je het vervolgens maar op de juiste manier inzet :).

Het gebruik van private is in zekere zin tegenstrijdig met de ontwerpprincipes van OOP zelf, omdat dat de herbruikbaarheid in de weg zit. Protected is meestal de veiligste keuze. Public is nogal... losbandig. Meestal heb je ook publieke methoden die je (indirect) toegang geven tot klassevariabelen, wat uit oogpunt van een soort van interface/"loket" misschien beter is.

NB ik bedoel hier enkel public, protected en private ten aanzien van klassevariabelen. Voor methoden kan het allemaal, al zou ik private nog steeds vermijden.
Gewijzigd op 20/07/2019 22:04:31 door Thomas van den Heuvel
 



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.