Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Sketch of how to make a functional style controller in PHP
* This is by no means complete, but it's a sketch of an idea I had to create a
* classless functional style framework for PHP.
* It might turn out to be something cool!
// This function allows creating a new function from two functions passed into it
function compose(&$f, &$g) {
// Return the composed function
return function() use($f,$g) {
// Get the arguments passed into the new function
$x = func_get_args();
// Call the function to be composed with the arguments
// and pass the result into the first function.
return $f(call_user_func_array($g, $x));
// Convenience wrapper for mapping
function map(&$data, &$f) {
return array_map($f, $data);
// Convenience wrapper for filtering arrays
function filter(&$data, &$f) {
return array_filter($data, $f);
// Convenience wrapper for reducing arrays
function fold(&$data, &$f) {
return array_reduce($data, $f);
// Page controller
$page = function($method, $params) {
// Setup null fallback method
$$method = function() {
return null;
// Page Index
$index = function() use($params) {
return "page->index\n";
// Method to view a page
$view = function() use($params) {
return "page->view->{$params['id']}\n";
// Method to add a page
$set = function() use($params) {
return "page->set->{$params['id']}\n";
// Method to delete a page
$delete = function() use($params) {
return "page->delete->{$params['id']}\n";
return $$method();
// Get the controller
$controller = 'page';
$controller = $$controller;
// Methods to run
$methods = array('index', 'view', 'set', 'delete');
// Fake params passed into the web app
$params = array('id' => 'index');
// Curry the controller method, while composing it with print_r
/* Highly functional, I know... */
$curry = function($method) use($controller,$params) {
// Execute the controller method
print_r ($controller($method, $params));
return null;
// Run all the methods
map($methods, $curry);

interesting, could you explain the idea in words? thanks!

oh just read the note about not emulating this... thanks


adaburrows commented Oct 20, 2011

Yeah, I should make it more clear that this was just a hack to demonstrate an idea. I have a much better example in my head, but I need to actually write it out when I have time.

Hi, if you're still doing some PHP, and still looking into doing FP web apps, here's my attempt at it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment