for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Doctrine\Inflector\Rules;
use Doctrine\Inflector\WordInflector;
use function array_keys;
use function implode;
use function preg_match;
use function strtolower;
use function substr;
class Substitutions implements WordInflector
{
/** @var Substitution[] */
private $substitutions;
/** @var string */
private $regex;
public function __construct(Substitution ...$substitutions)
foreach ($substitutions as $substitution) {
$this->substitutions[$substitution->getFrom()->getWord()] = $substitution;
}
$this->regex = '(?:' . implode('|', array_keys($this->substitutions)) . ')';
public function getFlippedSubstitutions() : Substitutions
$substitutions = [];
foreach ($this->substitutions as $substitution) {
$substitutions[] = new Substitution(
$substitution->getTo(),
$substitution->getFrom()
);
return new Substitutions(...$substitutions);
public function inflect(string $word) : string
if (preg_match('/(.*)\\b(' . $this->regex . ')$/i', $word, $regs) === 1) {
return $regs[1] . $word[0] . substr($this->substitutions[strtolower($regs[2])]->getTo()->getWord(), 1);
return $word;