Method direct uitvoeren in class
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
class Rights extends Core
function getRights() { ..
/// deze method returned een array met de rechten van de gebruiker..
}
function checkRights($what, $id = 0, $action = "view") {
// deze method is om de rechten te controleren. En returned een boolean (true/false)
}
?>
class Rights extends Core
function getRights() { ..
/// deze method returned een array met de rechten van de gebruiker..
}
function checkRights($what, $id = 0, $action = "view") {
// deze method is om de rechten te controleren. En returned een boolean (true/false)
}
?>
Hoe kan ik bij het initialiseren van deze class de getRights method uitvoeren? Ik las iets over de _constructor. Maar als ik de uitleg overal van op internet lees moet je dan een argument meegeven een de __constructor? En dat lijkt me niet nodig?
Of hoe met het wel?
Ben echt beginner in OOP, dus kom maar op.
Gewijzigd op 16/07/2010 00:33:13 door - Ariën -
Code (php)
Let wel op: extends Core is altijd fout!
OOP draait om het scheiden van verantwoordelijkheden, er mag dus niets over alle klassen verspreid zijn. Wat staat daar trouwens in dan?
Dat mag wel, het foute hier is dat Rights niet ingedeeld kan worden in Core.
Als er stond:
Dan is hier niets verkeerds aan. Aap is een specialisatie van Dier, of wel we vullende de klasse Dier aan met members/methodes voor een Aap.
Ik zou in de klasse Richts een member maken "oCore".
Gewijzigd op 16/07/2010 09:41:15 door Martijn B
Misschien dat ik die hele rechten wel direct in de 'core' zal zetten.
Nee, extends core is eigenlijk nooit goed. Niets hoort gedeeld te worden over alle klassen. Extenden is uiteraard goed, zelfs noodzakelijk voor OOP. Maar het is juist in strijd met de OOP principes om een gedeelde klasse te hebben die door alle klassen wordt uitgebreid.
Aar anoniem op 16/07/2010 10:32:27:
Misschien dat ik die hele rechten wel direct in de 'core' zal zetten.
Maar dit is dan wel goed? Als ik de right-methods in de core-class plaats?
Aar anoniem op 29/09/2010 17:47:37:
Maar dit is dan wel goed? Als ik de right-methods in de core-class plaats?
Aar anoniem op 16/07/2010 10:32:27:
Misschien dat ik die hele rechten wel direct in de 'core' zal zetten.
Maar dit is dan wel goed? Als ik de right-methods in de core-class plaats?
Rechten is toch geen hoofdzaak?
Gewijzigd op 29/09/2010 19:17:52 door - Ariën -
Rechten zijn een onderdeel van Gebruikers, en niet van de gehele site... Deel je site eens op in losse modules, schrijf op welke eigenschappen ze hebben en denk na over de structuur van je objecten. Dat helpt.
Meer code heb ik nog niet. De applicatie moet nog naar OOP worden 'geport' ;-)
Aar anoniem op 29/09/2010 19:40:21:
Meer code heb ik nog niet. De applicatie moet nog naar OOP worden 'geport' ;-)
Dan kan je het juist uittekenen hoe je alles wilt hebben. Soort van ERD maken ofzo :-D :-).
Teken alles uit. Zoals karl al zegt. Dus heel even kort door de bocht, ik wil je de volgende 2 uur niet meer zien hier op het forum.. :)
Teken de siteflow uit. Maak een ERD, ga wat modelleren. Maak het zo, dat een persoon die niks van jouw applicatie af weet aan de hand van de tekeningen hem kan bouwen zoals jij wilt! Je zult dan zien dat je applicatie voor jezelf al ineens veel duidelijker is.
Beschrijf ook wat iets doet: Voorbeeldje van database:
Een database is een applicatie waarin alle data van een applicatie op een gestructureerde manier opgeslagen kan worden. Data wordt opgeslagen in de vorm van tabellen die relaties met elkaar hebben. De data kan gemanipuleerd worden doormiddel van zogeheten SQL queries.
Het resultaat van een query komt terug in de vorm van een resultset. Dit zijn de resultaten in een intern formaat. Deze kunnen omgezet worden in voor PHP leesbare formaten.
Er zijn diverse databases in omloop. De meest gebruikte voor PHP is MySQL, maar er zijn ook MSSQL, PostgreSQL en nog vele anderen.
Als je van alle vet gedrukte woorden enkelvoud gaat maken en deze onder elkaar zetten, dan krijg je de volgende lijst:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
* Database
* Applicatie
* Data
* Manier
* Tabel
* Relatie
* SQL query
* Resultaat
* Resultset
* Formaat
* PHP
* MySQL
* MSSQL
* PostgreSQL
* Applicatie
* Data
* Manier
* Tabel
* Relatie
* SQL query
* Resultaat
* Resultset
* Formaat
* PHP
* MySQL
* MSSQL
* PostgreSQL
Er staan een aantal woorden bij die je niet nodig zult hebben bij het modelleren van de database. Zo heb je het woord Applicatie wat enkel verwijst naar de definitie van Database. Deze klasse dient geen enkel doel in de applicatie.
Dan heb je Manier; de manier waarop data opgeslagen wordt. Dit is niet iets voor de applicatie, want je wilt alleen een laag op de database bouwen, dus niet de database zelf implementeren. De manier waarop de data opgeslagen wordt is dus niet van belang. Voor Formaat geldt precies hetzelfde.
PHP is de taal waarin je de code gaat implementeren daar is dus geen klasse voor nodig. Ook deze kan je uit het lijstje strepen. Je houd dan de volgende lijst over:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
* Database
* Data
* Tabel
* Relatie
* SQL query
* Resultaat
* Resultset
* MySQL
* MSSQL
* PostgreSQL
* Data
* Tabel
* Relatie
* SQL query
* Resultaat
* Resultset
* MySQL
* MSSQL
* PostgreSQL
Ook in dit lijstje valt echter nog te strepen. Zo is resultaat en resultset ongeveer hetzelfde, beide representeren het resultaat van een query. Je kan de klasse Resultaat dus wegstrepen. Dan heb je nog een aantal klasse die we beter in een ander formaat dan een klasse kunnen representeren.
Zo heb je data, maar dat is handiger om dat gewoon in een array neer te zetten, of bij het resultset de gebruiker zelf te laten kiezen welk formaat hij / zij de data in wil. Deze kan dus ook weg uit de lijst. Een beetje hetzelfde geldt voor SQL query. Dit kan gewoon in een string representatie.
Wat je vaak ziet tegenwoordig is dat er een hele bibliotheek omheen gebouwd wordt waarmee je doormiddel van code SQL queries kan samenstellen. Het nadeel hiervan is dat dit ontzettend ingewikkeld wordt; SQL is een complexe taal en dat het ook nog eens traag wordt terwijl gewoon de string representatie net zo flexibel is en een stuk eenvoudiger. Je zult dan ook gewoon gebruik maken van SQL queries. Deze klasse kan uit de lijst weggestreept worden.
Dan heb je nog twee klassen die met de inhoud van de database te maken hebben. Dit is tabel en relatie. Dit is iets dat de database intern bij houdt, maar de applicatie hoeft zich hier niet van bewust te zijn, deze kan gewoon toe met het uitvoeren van queries en de data die daar uit komt.
Het lijstje wordt een stuk kleiner en komt er als volgt uit te zien:
Nu kan je gaan bedenken welke attributen er bij elke klasse horen. Dan krijg je bijvoorbeeld dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
* Database
o connectie
* Resultset
o resultaat
* MySQL
o connectie
* MSSQL
o connectie
* PostgreSQL
o connectie
* MySQLResult
o resultaat
* MSSQLResult
o resultaat
* PostgreSQLResult
o resultaat
o connectie
* Resultset
o resultaat
* MySQL
o connectie
* MSSQL
o connectie
* PostgreSQL
o connectie
* MySQLResult
o resultaat
* MSSQLResult
o resultaat
* PostgreSQLResult
o resultaat
Zie je dat het nu al veel duidelijker wordt hoe je een database in de applicatie implementeert? Probeer nu de rest van de applicatie zo uit te denken, en plaats eens hier wat het resultaat is.
Succes!
Gewijzigd op 29/09/2010 20:44:58 door Niels K
Thnx _O_
Geen probleem en veel succes! We horen het wel!
En?
Ben d'r mee bezig.... :-)