Method direct uitvoeren in class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

16/07/2010 00:32:50
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
}
?>


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 -
 
PHP hulp

PHP hulp

19/04/2024 04:50:33
 
Pim -

Pim -

16/07/2010 02:30:54
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Rights extends Core
{
    protected $_rights;

    public function __construct()
    {

        $this->_rights = $this->getRights();
    }
}

// Gewoon zo, nu $rights = new Rights;
?>

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?
 
Martijn B

Martijn B

16/07/2010 09:39:22
Quote Anchor link
@Pim de Haan:

Dat mag wel, het foute hier is dat Rights niet ingedeeld kan worden in Core.
Als er stond:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
class Aap extends Dier {...}
?>

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
 
Niels K

Niels K

16/07/2010 09:43:25
Quote Anchor link
Aar lees anders de tutorial van blanche eens

http://phptuts.nl/view/45/7/
 
- Ariën  -
Beheerder

- Ariën -

16/07/2010 10:32:27
Quote Anchor link
Misschien dat ik die hele rechten wel direct in de 'core' zal zetten.
 
Pim -

Pim -

17/07/2010 06:00:02
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

29/09/2010 17:47:37
Quote Anchor link
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?
 

29/09/2010 18:24:23
Quote Anchor link
Aar anoniem op 29/09/2010 17:47:37:
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?
 
- Ariën  -
Beheerder

- Ariën -

29/09/2010 19:15:56
Quote Anchor link
Hoe zou ik het anders moeten indelen? Rechten worden in de hele CMS gebruikt.
Gewijzigd op 29/09/2010 19:17:52 door - Ariën -
 
SilverWolf NL

SilverWolf NL

29/09/2010 19:22:03
Quote Anchor link
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.
 
Niels K

Niels K

29/09/2010 19:22:10
Quote Anchor link
Je moet hem extenden van users

Kan je wat meer code laten zien?
Gewijzigd op 29/09/2010 19:22:35 door Niels K
 
- Ariën  -
Beheerder

- Ariën -

29/09/2010 19:40:21
Quote Anchor link
Meer code heb ik nog niet. De applicatie moet nog naar OOP worden 'geport' ;-)
 

29/09/2010 19:48:49
Quote Anchor link
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 :-).
Gewijzigd op 29/09/2010 19:49:21 door
 
Niels K

Niels K

29/09/2010 20:38:35
Quote Anchor link
Ik heb wel eens meer de tip gegeven hier op het forum.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
    * Database
    * 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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
    * Database
    * Resultset
    * MySQL
    * MSSQL
    * PostgreSQL

Nu kan je gaan bedenken welke attributen er bij elke klasse horen. Dan krijg je bijvoorbeeld dit:
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
    * Database
          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
 
- Ariën  -
Beheerder

- Ariën -

29/09/2010 21:17:01
Quote Anchor link
Kijk, hier kan ik wat mee.

Thnx _O_
 
Niels K

Niels K

29/09/2010 21:23:11
Quote Anchor link
Geen probleem en veel succes! We horen het wel!
 
Niels K

Niels K

12/10/2010 20:55:44
Quote Anchor link
En?
 
- Ariën  -
Beheerder

- Ariën -

13/10/2010 00:48:27
Quote Anchor link
Ben d'r mee bezig.... :-)
 



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.