• Hallo allemaal.


    Ik zit met een probleem.


    Het framework bestaat uit:


    database (connectie class)
    session (sessie class)
    user (alle gebruiker gegevens class)
    language (met deze klas word de taal vastgesteld, xml bestand geladen)


    Alleen een probleem, ze classes hebben dingen van elkaar nodig.


    Nu heb ik het zo:




    De language class heeft de user class nodig.
    De user class heeft de sessie en de database class nodig.


    Wat ik geprobeerd heb is de sessie class hem te extenden aan het Framework maar dat werkt niet.


    Uiteindelijk moet je simpel een klasse aan kunnen maken en deze te extenden aan het framework zodat je alles kan gebruiken!



    Hoe is dit op te lossen?

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Dependency Injection pattern?
    http://fabien.potencier.org/ar…t-is-dependency-injection


    maw je objecten meegeven als parameter met je constructors zodat je loosely coupling verkrijgt.


    Als ik het goed begrijp?


    PHP
    class Framework {
        public $database, $session, $user, $language;
        public function __construct() {
            // The core classes
            $this->database = new Database();
            $this->session = new Session();
            $this->user = new User($this->session, $this->database);
            $this->language = new Language($this->user);
        }
    }


    En dan kan je doormiddel van de constructors de klasses gebruiken?

  • Je geeft als het ware via je parameters van de constructors die objecten mee, waardoor je deze nu volledig kunt gebruiken (althans de public attributes ervan)


    Dus dat is inderdaad wat ik er ook van begrijp ;)

    Het werkt.


    In de framework klasse:

    PHP
    $this->user = new User($this->database, $this->session);


    In de user klasse:

    PHP
    public function __construct($database, $session) {
        $this->database = $database;
        $this->session = $session;
    }


    Dit is de enige manier om het zo dus op te lossen?

  • Het is natuurlijk niet de enige manier om dit op te lossen. Maar wel de meest gebruikelijke...
    Ikzelf ben ook al een tijd bezig met een framework en ik heb sinds kort ook een simpele dependency container gemaakt voor al mijn classes. Ik ga de Core hiervan binnenkort releasen... (staat momenteel als private repository in git)


    Via de volgende link zie je een voorbeeld hoe ik het heb gedaan ;)


    http://pastebin.com/sHEPngTL

  • Een Framework-class die alle referenties heeft is sowieso geen goed idee. Inversion of Control (waarop dependency injection is gebaseerd), is een prima, zo niet de beste oplossing.


    Het bouwen van een eigen framework is echter altijd een slecht idee. Eén uitzondering daargelaten: om bij te leren. Mocht je dus een framework zoeken voor productie, neem dan een bestaande..

  • Frameworks als Cake en Codeigniter pakken het op precies dezelfde manier aan als dat je er een zelf schrijft ;) ALLEEN het grote verschil tussen deze frameworks is dat er vaak een bedrijf/community achter zit. Bij CodeIgniter is dit bijvoorbeeld Ellislab waarbij CodeIgniter gebruikt word als Core van hun dienst ExpressionEngine. Het voordeel hiervan is is dat je binnen 2 dagen een update kan verwachten wanneer dit nodig is omdat het bijvoorbeeld niet veilig is.


    Daarom adviseert Stefan om geen framework te maken wanneer je geen idee hebt hoe je zoiets moet doen. Zeker omdat m.b.t. veiligheid je mensen van verschillende disciplines nodig hebt om zoiets goed te maken. Maar desondanks een goed leerproject.

  • CakePHP vind ik persoonlijk zeker geen goed framework. Als je kijkt naar de werking van model objecten (tenminste, een half jaar terug), zie je dat deze een save of zelfs een statische getAll of query method hebben. Dit is tegen alle principes in. Een model zoals een User heeft properties, en die kun je opvragen. Een user kan zichzelf niet opslaan, daarvoor heb je een UserService of een UserRepository.


    Het principe dependency injection is in de PHP-wereld nog niet helemaal doorgedrongen. Maar grote Java-frameworks zoals Spring of zelfs de Java EE standaard zweren erbij. DI biedt de mogelijkheid eenvoudig functionaliteit te verdelen over classes die één ding en alleen één ding te doen. Daarnaast komt het de testbaarheid van code ten goede. Daarbij komt de vuistregel die eigenlijk altijd klopt: Als je code niet of slecht testbaar is middels unittests, is je design niet correct.


    PHP frameworks die meer in zich hebben als een gemiddeld PHP-framework waarvan ik op de hoogte zijn zijn Symphony en Yii. Daarbij moet ik wel zeggen dat mijn PHP-kennis ongeveer een jaar achterloopt..

  • Sinds php 5.3 kun je dit helemaal toepassen als het goed is. Momenteel is de Core van Yii 50% langzamer op mn benchmark dan mijn eigen geschreven Core dus ik hoop dit ook zo te houden :thumbup: al blijft het in eerste instantie een leerproject.

  • En als je toch naar verschillende frameworks gaat kijken, dan raad ik persoonlijk Laravel aan.


    Laravel is tegenwoordig mijn vertrekpunt wanneer ik een nieuwe web-site/applicatie in php wil maken.

    Ik had al een tijdje op mijn todo lijst staan om Laravel te gaan leren / gebruiken, ben er nu 2 dagen mee bezig.
    Conclussie: ik ben verliefd :O, clean overzichtelijk degelijk snel up-2-date etc.

  • Ik heb een tijdje geleden Laravel geprobeerd, alleen ik vondt het niet heel erg super.. Gelukkig heb ik nu zelf een eigen Framework gemaakt waarmee ik de meeste website opbouw.

  • Ik had al een tijdje op mijn todo lijst staan om Laravel te gaan leren / gebruiken, ben er nu 2 dagen mee bezig.
    Conclussie: ik ben verliefd :O, clean overzichtelijk degelijk snel up-2-date etc.


    :D Ik kan mezelf wel vinden in jouw conclusie, dat was ook mijn eerste reactie.
    CodeIgniter was wel leuk, maar Laravel werkt veel intuïtiever, en zit beter in elkaar.


    @Kwolf


    Wat kon Laravel niet leveren wat jij met je eigen framework wel kan? Ben wel benieuwd.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!