Is het beter om alle classes in 1 script te zetten (lijkt mij handiger en mooier).
Of is het beter om de class te maken in het het desbetreffende php script?
Ik zelf zou aanraden om het in 1 bestand te zetten. Dan lijkt het me wel slim om ze te classificeren tot bepaalde catagorieen.
Dus bijvoorbeeld alle classes die je wil maken m.b.t. database verwerkingen in een db.class.php te zetten. En eventuele classes die met inloggen en eventuele user opties te maken heeft in een user.class.php te zetten.
Zodat je niet 300 regels aan classes en functies krijgt in 1 document. Tevens hoef je dan alleen de juiste classes te includen in de plaatsen waar je het nodig hebt, zonder alle classes overal beschikbaar te hebben.
Echter dit is mijn voorkeur en werkwijze, het hoeft uiteraard niet de beste uitkomst te bieden. Wat lijkt je zelf prettiger werken? Dat is tenslotte het belangerijkste :D
?
Onbekende gebruiker
09-05-2012 08:47
Mij lijkt het zo ook het prettiger werken Chris dus dan doe ik het ook zo:D
ik zou zeggen: werk met datamappers en aparte bestanden.
sla elke class op in een apart .class.php
en voor databasebewerkingen gebruik je dan een datamapper: een class die juist een andere class verwacht als parameters bij de methods, en voor jou de connectie met de buitenwereld vastlegt.
voor de user classe bijvoorbeeld, die doe je helemaal apart.:
user.class.php:
<?php
class User
{
private $_name;
public function __construct( $name )
{
$this->_name = $name;
}
public function getUsername()
{
return $this->_name;
}
//rest van de class....
}
?>
userMapper.class.php:
<?php
class UserMapper
{
//connectie etc
public function insertName( User $user )
{
$query = "INSERT INTO users (username) VALUES ('" . $user->getUsername() . "')";
//uitvoering etc
}
}
Per class een apart bestand. Waarom? Omdat je dan veel en veel eenvoudiger classes kunt uitwisselen tussen projecten. Stel je hebt een project met 10 classes en die sla je allemaal op in hetzelfde bestand. Dan wil je daarna een van die classes in een ander project gebruiken. Ga je dan het hele bestand includen (met dus 9 overbodige classes), of ga je de code copieren naar een ander bestand (waardoor je dus dezelfde code in 2 bestanden hebt staan wat onderhoud bemoeilijkt)?
Een andere reden is dat in een echt OOP omgeving je vaak niet voor elke pagina elke class nodig hebt. Als je dus alles in hetzelfde bestand plaatst laad je veel overbodige code in. Als je elke class zijn eigen bestand geeft dan laad je alleen dat wat je daadwerkelijk nodig hebt.
Nog een voordeel. Stel je hebt een class voor een bepaalde taak, zeg het inlezen van je teksten. Nu wil je alleen je website in een andere taal gaan zetten. Wat je kan doen (er zijn natuurlijk veel meer mogelijkheden, maar als voorbeeld) is voor elke taal een dezelfde class gebruiken, maar met een andere implementatie. Dus zelfde naam van de class, zelfde methodes, maar met de teksten in verschillende talen. Je hoeft dan alleen bij de include een ander bestand aan te roepen, de rest van je code (de hele code!) kan gelijk blijven. Als je alle classes in hetzelfde bestand stopt kan dit niet.
Uitzonderingen daargelaten: elke class in een ander bestand. Ga niet voor 'makkelijk', ga voor 'goed'.
@Bas, nee ik zou jou manier niet aanraden. Als ik ergens een hekel aan heb is om folder in folder in folder te gebruiken. Je includes worden zo lang en het gebruik van ./ en ../ werkt ook niet overal even goed en zuiver. Voornamelijk als je zelf localhost test en dus sites in verschillende folders in de root zet krijg je hier al problemen.
../ gaat namelijk terug naar je root, ./ gaat 1 folder omhoog. Mijn httpdocs folder ziet er als voobeeld zo uit als ik test.
| httpdocs
- Test website 1 (niet de originele naam uiteraard!)
- Test website 2 (niet de originele naam uiteraard!)
- Test website 3 (niet de originele naam uiteraard!)
Dus i.p.v. dat ../ terug gaat naar de root van Test website 1, gaat hij terug naar httpdocs.
Ik raad aan om dan een folder class te maken en daarin bijvoorbeeld het volgende te doen.
| Class
- nieuws.nieuwsartikel.php
- nieuws.reactie.php
- gebruiker.user.php
- gebruiker.privebericht.php
Dit komt op het zelfde neer, alleen vermijd je subfolders. Alles is toch gecatagoriseerd en duidelijk.
TIP: Als je dus niet bestanden eindigd met .class.php, zet dan bovenaan in het script een comment waar je aangeeft dat het een class betreft. Dit moet uiteraard duidelijk zijn voor mensen die de code zien, echter voor wat beginners in OOP kan het zonder duidelijke comment wat onduidelijker zijn
@Bas, nee ik zou jou manier niet aanraden. Als ik ergens een hekel aan heb is om folder in folder in folder te gebruiken. Je includes worden zo lang en het gebruik van ./ en ../ werkt ook niet overal even goed en zuiver. Voornamelijk als je zelf localhost test en dus sites in verschillende folders in de root zet krijg je hier al problemen.
Dat kan je oplossen met ofwel een autoload functie, ofwel je include path goed te zetten. Dit laatste kan in de ini, of gewoon via een functie aan het begin van je script.