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.

Ik gebruik Zend Framework met name omdat ik mooie routes kan maken, bijvoorbeeld www.mijnsite.nl/kantoorartikelen/nietmachine in plaats van www.mijnsite.nl/?category=4&product=2.

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.

Nee, maar wat ik wil kan toch ook niet denk ik??? (tenzij misschien heel omslachtig)
Idd. Dat wordt aardig lastig en daarmee onwenselijk.
oke :)

[size=xsmall]Toevoeging op 02/01/2011 22:04:05:[/size]

wat is overigens dat "lazy registreren van een object" waar Niels het eerder over had?
Ik neem aan dat hij het instellen (instantieren en configureren) van een object bedoelt wat pas op aanvraag gebeurt.

Dus als een registry, maar dan gebeurt er pas iets bij aanvraag en niet vooraf.

Kijk eens naar Pimple
Hmmm... ik vrees dat ik hier niks van ga snappen :-/
Je kunt zeker niet een heeeeeeel simpel code voorbeeldje geven zodat ik in ieder geval het principe snap? (en hopelijk ook waar je het voor kunt gebruiken)
Ozzie PHP op 02/01/2011 22:15:52

Hmmm... ik vrees dat ik hier niks van ga snappen :-/
Je kunt zeker niet een heeeeeeel simpel code voorbeeldje geven zodat ik in ieder geval het principe snap? (en hopelijk ook waar je het voor kunt gebruiken)



Het is eigenlijk heel simpel. Je maakt een instantie van een object aan pas op het moment dat je hem nodig hebt. Zie http://dougalmatthews.com/articles/2008/apr/26/lazy-loading-in-php-with-__autoload/.
huh? Dat is toch gewoon de autoload functie die al eerder ter sprake is gekomen?
__autoload is voor het lui inladen van classes. Wat Pim bedoelt is denk ik dat je objecten in je registery/dependency container pas gaat aanmaken wanneer je ze voor het eerst nodig hebt:
<?php

class Container
{
private $_database;

public function getDatabase()
{
if (!$this->_database)
$this->_loadDatabase();

return $this->_database;
}

private function _loadDatabase()
{
$this->_database = new PDO(...);
}
}

$x = new Container();
// geen verbinding gemaakt.

$pdo = $x->getDatabase();
// jeej, nu nodig, dus nu een verbinding

$pdo2 = $x->getDatabase();
// verbinding is al gemaakt, kunnen we hem best hergebruiken.
?>

Maar omdat dat al snel heel veel dezelfde code wordt, is het wel prettig om iets flexibelers te hebben zoals Pimple. Of, eentje die erop lijkt en die ik zelf gebruik:
<?php

class DependencyContainer
{
private $_factories = array();

private $_instances = array();

public function add($name, $factory)
{
$this->_factories[$name] = $factory;
}

public function __get($name)
{
if (!isset($this->_instances[$name]))
$this->_instantiate($name);

return $this->_instances[$name];
}

private function _instantiate($name)
{
if (!isset($this->_factories[$name]))
throw new DependencyContainer_Exception("There is no factory for $name.");

$instance = $this->_factories[$name]($this);

if (is_null($instance))
throw new DependencyContainer_Exception("Factory for $name returned NULL.");

$this->_instances[$name] = $instance;
}
}

class DependencyContainer_Exception extends Exception
{}

$x = new DependencyContainer();

$x->add('pdo', function($container) {
return new PDO(...);
});

$x->add('users', function($container) {
return new User_Store($container->pdo);
});

// Nu wordt User_Store pas ingeladen en aangemaakt, en daarvoor wordt dan PDO aangemaakt.
$x->users->find();
?>
Sakkerjuu... autoload... dependency injection... lazy objecten... het is me wat allemaal :)

Waarom gebruik je een underscore voor je functie- en variabelenamen?

(misschien stomme vraag, maar wat is een factory?)

Reageren