Functioneel PHP Framework

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pim -

Pim -

24/04/2012 12:41:18
Quote Anchor link
Allemaal leuk en aardig dat OOP, maar het kan ook anders.
Ik heb geprobeerd alles zo puur functioneel mogelijk gehouden. Dus:

Geen veranderende variabelen!

Elke assignment had ook weggelaten kunnen worden, maar is toegevoegd voor de leesbaarheid of omdat PHP er anders niet mee om kan gaan, bijv. $array[2]($arg). De view() functie is niet puur functioneel. Ik heb geen idee hoe ik dat anders zou kunnen doen.

Ik heb daarnaast alleen maar de ternary operator gebruikt, geen ifs en elses, omdat ik het idee/de illusie heb dat dat meer overeenkomt met functionele talen.


Ik ben ook maar een noob met functioneel programmeren, dus alle suggesties zijn welkom :).

Gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
echo app(
    array(
        route('/hi/:name', function($params) {
            return 'Hi '.$params['name'];
        })
    ),
'/hi/Pim', array());
?>


https://gist.github.com/2478668
Gewijzigd op 24/04/2012 12:41:36 door Pim -
 
PHP hulp

PHP hulp

24/04/2024 02:37:31
 
Jelmer -

Jelmer -

24/04/2012 13:03:46
Quote Anchor link
Ik gebruik het zelf heel veel voor database-resultaten. Ik heb een SQL_Table class die de select-queries voor je maakt, en een PDOStatement teruggeeft. Die stop ik dan in een PDOIterator, die stop ik dan weer in een FunctionalIterator, en dan kan je dingen doen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

echo $personen
    ->find(array('x' => 'y'))
    ->
filter(function($persoon) { return $persoon->leeftijd > 4; })
    ->
map(function($persoon) { return $persoon->naam; })
    ->
reduce(function($naam, $prev) { return $prev . ', ' . $naam; });
?>

En het leukste is.. de daadwerkelijke code wordt pas uitgevoerd in de reduce-stap, waar via een lusje alle elementen worden afgegaan. Alle tussenliggende stappen plakken gewoon iterators om iterators heen. Als je alleen de eerste 10 elementen nodig hebt, worden er maar 10 elementen door die hele reeks van iterators getrokken (gegeven dat filter niets weggooit ;))

Sterker nog, ik had ergens een BufferingIterator, daar kon je een query in stoppen en die haalde dan in stappen van 30 resultaten uit de database. Als je dan maar 50 resultaten nodig had haalde hij maximaal 60 dingen uit de database. Pagination, geheel transparant zeg maar :)

Oftewel: functioneel programmeren is machtig mooi. PHP is er niet helemaal ideaal voor, maar het kan prima.
 
Pim -

Pim -

24/04/2012 13:18:35
Quote Anchor link
Dat ziet er natuurlijk goed uit, maar ik neem aan dat je alleen de find clause in je query verwerkt en dan heb je zo wel heel veel overhead. Toch?

Heb je verder nog inhoudelijke opmerkingen op het frameworkje?
Gewijzigd op 24/04/2012 13:33:37 door Pim -
 
Kees Schepers

kees Schepers

25/04/2012 12:54:47
Quote Anchor link
Al eens gekeken naar Silex?
 
Ozzie PHP

Ozzie PHP

25/04/2012 13:00:39
Quote Anchor link
Kees Schepers op 25/04/2012 12:54:47:
Al eens gekeken naar Silex?

Die naam heb ik eerder voorbij zien komen...!

http://www.phphulp.nl/php/forum/topic/di-goed-op-weg/84211/#599508
 
Pim -

Pim -

25/04/2012 13:07:37
Quote Anchor link
Silex heeft toch niet zo veel met functioneel programmeren van doen?
 
Jelmer -

Jelmer -

26/04/2012 11:29:39
Quote Anchor link
Ik heb niet echt een framework, het zijn meer wat hulpmiddeltjes, classes en functies die in PHP zelf missen. (curry bijvoorbeeld, en str_concat!) Er is niet echt documentatie, ik heb ze gewoon geschreven omdat ik ze op dat moment "nodig" had: https://gist.github.com/2498047

Als je eens serieus naar functioneel programmeren wil kijken, probeer eens wat met Haskell. Er zijn hele mooie tutorials om erin te komen en eens in een echt functionele taal hebben geprogrammeerd geeft je allemaal nieuwe ideeën die je ook in je imperatieve en object-georiënteerde projecten kan gebruiken.
 
Kees Schepers

kees Schepers

26/04/2012 11:34:01
Quote Anchor link
Nou, Silex lijkt wel erg veel op jouw voorbeeldje Pim, en ook die van Jelmer :)
 
Pim -

Pim -

26/04/2012 17:15:10
Quote Anchor link
@Jelmer,
Ja heb ik kreeg toevallig ook dit idee terwijl ik bezig was in 'Learning Haskell for Great Good' ;).

@Kees,
Ja, de interface lijkt erop, maar de werking is wel ietsjes anders, niet?
 
Pim -

Pim -

28/04/2012 16:15:05
Quote Anchor link
@Jelmer,
Ik vind je Haskell-style maybe heerlijk ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.