[PHP] Class of geen class

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Nu ik mijn eigen cms aan het maken ben loop ik tegen een 'probleem' aan.

Ik wil modules gebruiken op deze manier:
[module_news] -> index.php
---------------------- [map classes] -> data.class.php (mogelijk nog meer classes)

Mijn idee was dit: data.class.php verzameld alle informatie en geeft die door aan index.php. Ik gebruik geen template engine, dus in index.php komt wel wat php code in voor , maar niet veel. Voorbeeld: index.php krijgt een array door van data.class.php met alle niewsberichten. Dan output index.php de data die hij heeft gekregen.

Maar goed dat even over mijn opzet, nu het probleem. Ik zit te twijfelen of ik van data.class.php een class maak of dat ik in index.class.php een lijst met functies zet (dan rename ik hem natuurlijk ;) ) die ik aanroep vanuit index.php.
De manier waarop de database verbinding wordt aangeroepen verschilt ook minimaal, zoals ook uit de onderstaande voorbeelden blijkt.

Om het even praktisch te maken een voorbeeld als ik een class zou gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// index.php:
<?PHP
include_once('classes/data.class.php');
$data = new Data();

echo "Laatste nieuwsbericht van vandaag:" .$data->getLastNewsitem();  // ff heel simpel voorbeeld
?>

// data.class.php:
<?PHP
class Data extends Database () {
function getLastNewsitem () {
// array uit database halen
}
?>


Of ik gebruik geen classes of deze manier:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// index.php:
<?PHP
include_once('classes/data.class.php'); // FF voor de duidelijk zelfde naam gehouden

echo "Laatste nieuwsbericht van vandaag:" .getLastNewsitem();  // ff heel simpel voorbeeld
?>

// data.class.php:
<?PHP
include_once('Database.php');

function getLastNewsitem () {
// array uit database halen
}
?>



Volgens mij mis ik ergens helemaal het nut van classes. Welk voordeel kan het mij bieden, want op deze manier zoals ik het hierboven beschijf is het nutteloos.

Acties:
  • 0 Henk 'm!

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Je hebt duidelijk het OO-verhaal nog niet helemaal begrepen, maar dat is ook niet zo makkelijk om dat 123 door te hebben en het meteen toe te passen in een taal als PHP. Met PHP kan het namelijk ook op vele andere manieren.

Ook moet je OO niet als doel stellen maar het alleen gebruiken als je het ook echt nodig hebt. Voor simpele dingen is het vaak niet eens handiger, zelfs onhandig.

je zou zoiets kunnen maken:

+ Nieuws

- titel
- auteur
- datum
- bericht

+ getTitel : String
+ getAuteur : String
+ getDatum : String
+ getBericht : String

Ik raad je aan om eens wat OO artikeltjes te lezen, als je eenmaal het idee erachter snapt dan kun je een PHP applicatie aardig OO maken, maar nogmaals als het een hele simpele webapp wordt is het vaak niet handig om het zo te doen.

Acties:
  • 0 Henk 'm!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
Via methode1 is de oo manier, de andere manier is "gewoon" met functies. Dus de eerste is naarwaar je opzoek bent.

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
x-force schreef op dinsdag 27 december 2005 @ 12:33:
Via methode1 is de oo manier, de andere manier is "gewoon" met functies. Dus de eerste is naarwaar je opzoek bent.
De eerste methode maakt gebruik van Objecten ja. Maar het is niet echt een nette manier van werken.

Als je toch gebruik maakt van classes kan je beter iets van de volgende structuur gebruiken ( Disclaimer: geen goede php ofzo het gaat meer om het idee )
code:
1
2
3
4
5
6
7
8
9
class NewsItem{
    $message;
    $date;
}
class NewsItemRepository{
    GetNewsItemByID( $id ){}
    GetLastNewsItems( $count ){}
    //Uses DB classes to get NewsItems
}

Je hebt dan ook nog wat classes om simpele data taken over te nemen en eventueel een extra NewsItemDB class die de query's uitvoert door middel van de andere DB Util classes.

Zijn class Data die hier de data ophaalt extends Database. Maar waarom zou je dat doen als het helemaal geen database is. Hij maakt mischien gebruik van de Database class maar dan moet je hem niet meteen extenden.

[ Voor 5% gewijzigd door Woy op 27-12-2005 14:26 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

De opzet voor je cms is ongeveer vergelijkbaar met het cms wat ik nu voor mijn bedrijf aan het ontwikkelen ben. Ik zie dat je neigt naar het MVC-model.

Als je van plan bent om OOP te gaan werken raad ik aan om je eens te verdiepen in dit model.

Je stuurt je modules aan met een zogeheten "controller". Deze controller bepaalt welk module bestand geladen wordt. Vervolgens bepaalt de controller binnen in de module welke actie gekozen is en haalt via je view, method en database classes de gewense informatie op. Deze worden dan via de controller weer naar de browser gestuurd.

Hierdoor krijg je niet alleen een heel schaalbaar systeem, maar kun je heel eenvoudig modules met elkaar combineren en aansturen.