1. Go to this page and download the library: Download toobo/matching library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
toobo / matching example snippets
use Toobo\Matching\Matcher;
$callback = Matcher::for(
function(string $name) {
return "Hi, my name is $name.";
},
function(int $age) {
return "I am $age years old.";
}
);
$callback('Giuseppe'); // "Hi, my name is Giuseppe."
$callback(35); // "I am 35 years old."
$callback = Matcher::for(
function(string $name, int $age) {
return "Hi, my name is $name and I am $age years old.";
},
function(int $age, string $name) {
return "Hi, my name is $name and I am $age years old.";
},
function(int $children) {
return $children === 1 ? 'I have 1 child.' : "I have $children children.";
}
);
$callback('Giuseppe', 35); // "Hi, my name is Giuseppe and I am 35 years old."
$callback(35, 'Giuseppe'); // "Hi, my name is Giuseppe and I am 35 years old."
$callback(1); // "I have 1 child."
$callback = Matcher::for(
function(string $name) {
return "Hi, my name is $name.";
}
)->failWith(function(...$args) {
return "Sorry, I don't know what you mean.";
});
$callback('Giuseppe'); // "Hi, my name is Giuseppe."
$callback(true); // "Sorry, I don't know what you mean."
$callback = Matcher::for(
function(string $name, int $age) {
return "I'm $name and I'm $age years old."
}
function($anything, int $age) {
return "I'm $age years old.";
}
);
$callback('Giuseppe', 35); // "I'm Giuseppe and I'm 35 years old."
$callback(true, 35); // "I'm 35 years old."
$callback = Matcher::for(
function(string $name) {
return "Hi, my name is $name.";
}
function(string $name, int $age, array $children = []) {
$msg = "I'm $name ($age)";
$count = count($children);
if ($count === 1) {
$msg .= ' I have 1 child, their name is ' . reset($children) . '.';
} elseif($count > 1) {
$msg .= "I have $count children: " . implode(', ', $children) . '.';
}
return $msg;
}
);
$callback('Giuseppe'); // "Hi, my name is Giuseppe."
$callback('Giuseppe', 35); // "I'm Giuseppe (35)."
$callback('Giuseppe', 35, ['Sofia']); // "I'm Giuseppe (35). I have 1 child, their name is Sofia."
$callback = Matcher::for(
function(string $name, int $age = -1) {
$msg = "I'm $name";
return $age > 0 ? "$msg ($age)." : "$msg."
}
function(string $name) {
return "Hi, my name is $name.";
}
);
$callback('Giuseppe'); // "Hi, my name is Giuseppe."
// $weight = {n. of total args} - abs( {n. of total args} - {n. of params in signature} )
$weight = 1 - abs(1 - 2); // 0
namespace Example;
use Toobo\Matching\Matcher;
class Person {
private static $factory;
private static function buildFactory(): Matcher {
self:$factory or self:$factory = Matcher::for(
function(string $firstname, string $lastname, int $age, string $email = '') {
$this->fullname = "$firstname $lastname";
$this->age = $age;
$this->email = $email;
},
function(string $fullname, int $age, string $email = '') {
$this->fullname = $fullname;
$this->age = $age;
$this->email = $email;
},
function(int $age, string $fullname, string $email = '') {
$this->age = $age;
$this->fullname = $fullname;
$this->email = $email;
}
);
return self:$factory;
}
public function __construct(...$args) {
self::buildFactory()->bindTo($this)(...$args);
}
public function introduce(): string {
$out = "My name is $this->fullname and I am $this->age years old.";
if ( $this->email ) {
$out .= " My email address is '$this->email'.";
}
return $out;
}
}
(new Person('Giuseppe', 'Mazzapica', 35))
->introduce();
// My name is Giuseppe Mazzapica and I am 35 years old.
(new Person('Giuseppe Mazzapica', 35))
->introduce();
// My name is Giuseppe Mazzapica and I am 35 years old.
(new Person(35, 'Giuseppe Mazzapica'))
->introduce();
// My name is Giuseppe Mazzapica and I am 35 years old.
(new Person(35, 'Giuseppe Mazzapica', '[email protected]'))
->introduce();
// My name is Giuseppe Mazzapica and I am 35 years old. My email address is '[email protected]'.
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.