PHP Classes
elePHPant
Icontem

File: README.md

Recommend this page to a friend!
  Classes of Eustaquio Rangel de Oliveira Jr.  >  PHPR  >  README.md  >  Download  
File: README.md
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: PHPR
Provide functional interfaces to manipulate arrays
Author: By
Last change: Undefined index on README
Date: 3 years ago
Size: 2,700 bytes
 

 

Contents

Class file image Download

PHPR

What is - motivation

Trying to extend some PHP objects to be used on a more functional way. Once one PHP developer said that nowadays IDE's can help us to avoid remembering the lack of standardization some PHP methods has. As I don't use an IDE, as lots of developers out there, I don't agree with that and I'm kind of tired to try to remember if on array_filter or array_map the array goes first and the function goes last or what order they are.

So, I think it's easier to use on a function and Ruby style way, where we can call the methods on the object and it returns what we need.

One notable exception to try to make things easier is that PHP have some reserved and constant words we cannot reuse even inside a namespace, like Array. So I needed to call the Array class Collection, otherwise it will be impossible to implement. All the classes have the original object accessible with the values method.

Other thing is that some methods just returns a value or null, true or false. No more guesses and wonderings of what happened if it returns 0 or false.

Samples

$t = new PHPR\Collection([0 => "zero", 1 => "one", 2 => "two"]);

// outputs: 
// null
// yay, no more 'undefined index' messages!
echo $t[10]."\n";

// outputs:
// zero
// one
// two
$t->each(function($e) {
   echo "$e\n";
});

// each
// outputs:
// 0 - zero
// 1 - one
// 2 - two
$t->each(function($key, $val) {
   echo "$key - $val\n";
});

$t->includes("one");    // true
$t->includes("three");  // false

// sort
// outputs:
// array(3) {
//   [0] =>
//   string(3) "one"
//   [1] =>
//   string(3) "two"
//   [2] =>
//   string(4) "zero"
// }
$sorted = $t->sort();
var_dump($sorted->values());

$t->min(); // "one"
$t->max(); // "zero"

// select
// outputs (keeping order):
// array(1) {
//   [0] =>
//   string(4) "zero"
// }
$selected = $t->select(function($e) {
   return strlen($e) > 3;
});
var_dump($selected->values());

// map
// outputs:
// array(3) {
//   [0] =>
//   string(4) "orez"
//   [1] =>
//   string(3) "eno"
//   [2] =>
//   string(3) "owt"
// }
$changed = $t->map(function($e) {
   return strrev($e);
});
var_dump($changed->values());

$t->all(function($e) { return strlen($e) > 2; })); // true
$t->all(function($e) { return strlen($e) > 3; })); // false

$t->any(function($e) { return strlen($e) > 3; })); // true
$t->any(function($e) { return strlen($e) > 4; })); // false

// chainable methods
// outputs:
// array(2) {
//     [0] =>
//     string(3) "eno"
//     [1] =>
//     string(3) "owt"
//   }
$changed = self::$_col->map(function($e) {
   return strrev($e);
})->select(function($e) { return strlen($e) <= 3; });
var_dump($changed->values());