Door
Ozzie PHP
op 30-12-2010 16:10
gewijzigd op 06-01-2011 13:17
50.681 views
Hmmm, laat ik de vraag toch maar eens stellen. Ik wil graag een eigen framework / beheersysteem maken. De bedoeling is dat ik als het systeem klaar is heel makkelijk een website kan maken waar meteen al een standaard cms gedeelte in zit.
Ik ben al begonnen met een framework en ik maak daarbij gebruik van Zend Framework, maar nu vraag ik me het volgende af. Ik heb behoorlijk wat PHP kennis en ervaring inmiddels, maar ik heb hier geen opleiding voor gehad. Ik wil het mezelf dan ook altijd zo makkelijk mogelijk maken als ik aan het programmeren ben. Voorbeeld, als ik een databasequery wil uitvoeren dan wil ik niet een hele query in te hoeven typen, maar wil ik simpele functies kunnen gebruiken, bijvoorbeeld: $database->setTable('tabel') en $row = $database->select('naam') etc.
Ook vind ik het handig dat ik in Zend Framework een route makkelijk kan koppelen aan een controller en een actie. Daarnaast gebruik ik de MVC structuur (modules), de Zend_Registry functie om iets op te slaan en gebruik ik de caching functie voor het cachen van gegevens.
Ik gebruik Zend Framework dus voornamelijk voor:
- maken van mooie routes
- routes koppelen aan controller en actie
- MVC structuur (modules)
- Zend_Registry om variabelen op te slaan
- Caching
Voor de rest gebruik in Zend Framework eigenlijk niet. Ik weet dat er heeeel veel mogelijkheden in Zend Framework zitten, maar ik ben niet iemand die dat allemaal wil uitvogelen, en ik wil toch altijd graag mijn eigen code schrijven zodat ik precies weet wat de code doet en hoe deze in elkaar zit (zodat het voor mijzelf logisch is en makkelijk te gebruiken).
Nu vraag ik me 2 dingen af:
1) is het voor mij eigenlijk wel zinvol om Zend Framework te gebruiken aagezien ik er niet heel veel mogelijkheden van benut.
2) zijn de 5 functies waar ik gebruik van maak (makkelijk) ook zelf te maken of is dat heel erg ingewikkeld?
Wat raden jullie aan? Zend Framework blijven gebruiken ook al gebruik ik er maar weinig van? Of toch zelf mijn eigen functies maken en Zend Framework niet meer gebruiken? Ik stel deze vraag ook omdat Zend Framework zo'n 23mb aan serverruimte in beslag neemt.
Als een registry ergens nuttig is, is het toch wel in de controller?
Zeker heb je gelijk in. Maar ik heb mijn registry niet in elke controller nodig en daarom is het naar mijn mening overboden dat je hem in de constructor als parameter opgeeft. Wil je bepaalde attributen vanuit het registry laden roep je gewoon de instantie aan en haal je de waarde op. Verder kan de registry natuurlijk het beste als een singleton. + wat lazy registreren van object is natuurlijk gewoon cool :)
@The Force
Zoals ik zei, ik zal hem eens downloaden voor verder onderzoek zodat ik de geruchten kan onderbouwen ja of nee :)
Over ZF:
ZF wordt leuk als je bezig bent met hele grote projecten, vandaar dat ik daar wel favorite van ben.
Ipv magic methods dan get en set functie maken?
Wat bedoel je met ArrayAutoloader en PearAutoloader?
Ja, Of gebruik ze gewoon beiden. Maar ik raad je ook aan om het [google]singleton[/google] pattern te gebruiken.
Over de ArrayAutoloader en PearAutoloader was even een snel hersenspinsel. Het idee hieronder uitgewerkt.
<?php
interface Autoloader
{
public function loader( $classname );
}
abstract class Loader
{
public function includeFile( $filename )
{
if( file_exists( $filename ) ) {
return include_once( $filename );
}
return false;
}
}
class ArrayAutoloader extends Loader implements Autoloader
{
public function loader( )
{
}
}
class PearAutoloader extends loader implements Autoloader
{
public function loader( )
{
}
}
?>
ArrayAutoloader is dus een array in de klasse pompen en die gaat op zoek naar de files en probeerd deze te importeren. Dat moet wel lukken geloof ik.
Met de PearAutoloader bedoel ik de op de zend framework manier. Dus bijvoorbeeld:
<?php
Framework_Registry::getInstance( );
?>
Wordt vertaald in Framework/Registry/Registry.php. Dan krijg je ongeveer het volgende:
<?php
public function loader( $classname )
{
$filename = str_replace( '_', '/', strtolower( $classname ) . '.php' );
if( file_exists( $filename ) ) {
return $this->includeFile( $filename );
}
return false;
}
?>
Dankjewel voor de code... aangezien ik geen opleiding heb gehad op IT gebied en nooit eerder heb gewerkt met abstracte classes en ik "implements" ook niet ken, is het wat lastig te volgen, dus ik zal me er in moeten verdiepen wat je precies doet met die autoloader classes.
Verder schrijf je "lazy registreren van object is natuurlijk gewoon cool :)". Nou, dat klinkt heel leuk... maar wat bedoel je hiermee :)
Over ZF:
ZF wordt leuk als je bezig bent met hele grote projecten, vandaar dat ik daar wel favorite van ben.
Dat lijkt me geen argument. Je moet het framework gebruiken die het beste past bij een project, niet andersom. Als de topicstarter van plan is met een team van programmeurs een groot overheidsproject aan te gaan pakken dan moet je je keuze nog maar eens overwegen. Het ziet er overigens wel erg 'stoer' uit met die bootstrap files en al die configuratie maar CI 'just works'. Het routing mechanisme is gewoon geniaal in eenvoud maar je kan er alles mee. Lees het volgende eens: http://www.inventis.be/blog/zend-framework-vs-codeigniter-the-good-the-bad/. CodeIgniter is een snel en weinig belastend RAD-framework. ZF is meer 'bloatware'. Goed geprogrammeerd, heel erg uitgebreid maar voor 99% van de projecten te lomp. Ik overdrijf miss. een beetje om mijn punt te maken maar je begrijpt me denk ik wel ;). Het argument in bovenstaande link dat functionaliteit als de ViewHelper ontbreekt vind ik overigens een beetje te kort door de bocht. Voor alles wat je wil zijn libraries te vinden.
Als de topic starter een framework wil die simpel is, volledig naar zijn hand te zetten is en waarmee snel goede applicaties gemaakt kunnen worden raad ik hem echt aan CI eens uit te proberen.
Dank je voor je reactie... maar nogmaals, het zelf maken lijkt me ook wel wat, want dan heb je nooit overkill aan (te veel) code en je weet zelf precies hoe alles in elkaar steekt wat ook weer z'n voordelen heeft lijkt me zo. Alleen specifieke technieken als autoloaden e.d. tja dat zal even best lastig zijn om uit te vogelen hoe ik dat moet aanpakken.
Dank je voor je reactie... maar nogmaals, het zelf maken lijkt me ook wel wat, want dan heb je nooit overkill aan (te veel) code en je weet zelf precies hoe alles in elkaar steekt wat ook weer z'n voordelen heeft lijkt me zo. Alleen specifieke technieken als autoloaden e.d. tja dat zal even best lastig zijn om uit te vogelen hoe ik dat moet aanpakken.
Als je geen dingen als autoloading, method chaining etc. erin stopt dan is je framework miss. klein, maar krijg je wel een overkill aan code die je moet kloppen voor elke website. Het is wel leerzaam. Nah goed, kijk maar wat je er mee doet. Ik stop met zeuren ;).
Aaaah... dat ziet er nice uit! :)
Is dat lastig om zelf te bouwen? Of gewoon kwestie van een goede tutorial? Lijkt me in ieder geval wel een superhandige optie!
Aaaah... dat ziet er nice uit! :)
Is dat lastig om zelf te bouwen? Of gewoon kwestie van een goede tutorial? Lijkt me in ieder geval wel een superhandige optie!
Gewoon CI gebruiken die hebben beiden opties aanwezig. ;)
Maar bovenstaande is natuurlijk allemaal mooi bedacht, maar hebben jullie er ook aan gedacht dat het soms helemaal niet handig is om met dit soort active records te werken?