PHP class dingen
Graag zou ik wat dingen willen weten over php classes.
Ik noem de class even 'forum'
Code (php)
1
2
3
4
5
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);
?>
//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?
https://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/visibility/1842/
En deze
https://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/constructor-construct/1844/
En deze
https://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/constructor-construct/1844/
Gewijzigd op 18/07/2019 20:52:13 door Adoptive Solution
Begin wel bij hoofdstuk 1 ;-)
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.
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...
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
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
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)
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
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");
?>
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");
?>
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