Inflector aus Ruby on Rails nach PHP überführen

Parantatatam

mag Cookies & Kekse
Hallo liebe Gemeinde,

ich bearbeite momentan den Inflector aus Ruby on Rails derart, dass ich ihn in PHP verwenden kann. Das ist mir bisher auch gelungen bis auf einen Punkt, welcher meiner Ansicht nach sowohl syntaktisch als auch logisch fehlerfrei ist. Aber da man manchmal eine Kleinigkeit übersieht, wollte ich euch darum bitten einmal darüber zu schauen.

Es geht um folgende Zeile (Zeile 7 im zweiten Codeschnippsel):
PHP:
self::singular('/('.$plural[0].')'.substr($plural, 1).'$/i'), '${1}'.substr($singular, 1));

Diese befindet sich in der statischen Methode irregular():
PHP:
public static function irregular($singular, $plural) {
    if($key = array_search($singular, self::$uncountables)) unset(self::$uncountables[$key]);
    if($key = array_search($plural, self::$uncountables)) unset(self::$uncountables[$key]);
    
    if(strtoupper($singular[0]) === strtoupper($plural[0])) {
        self::plural('/('.$singular[0].')'.substr($singular, 1).'$/i', '${1}'.substr($plural, 1));
        self::singular('/('.$plural[0].')'.substr($plural, 1).'$/i'), '${1}'.substr($singular, 1));
    }
    else {
        self::plural('/'.strtoupper($singular[0]).'(?i)'.substr($singular, 1).'$/', strtoupper($plural[0]).substr($plural, 1));
        self::plural('/'.strtolower($singular[0]).'(?i)'.substr($singular, 1).'$/', strtolower($plural[0]).substr($plural, 1));
        self::singular('/'.strtoupper($plural[0]).'(?i)'.substr($plural, 1).'$/', strtoupper($singular[0]).substr($singular, 1));
        self::singular('/'.strtolower($plural[0]).'(?i)'.substr($plural, 1).'$/', strtolower($singular[0]).substr($singular, 1));
    }
}

Ansonsten sind noch die statischen Methoden plural() und singular() wichtig, welche gleich aufgebaut sind, aber sich durch die Gruppe von Wörtern unterscheiden, für die sie Regeln festlegen (Plural und Singular):
PHP:
public static function plural($rule, $replacement) {
    if($key = array_search($rule, self::$uncountables)) unset(self::$uncountables[$key]);
    if($key = array_search($replacement, self::$uncountables)) unset(self::$uncountables[$key]);
    array_unshift(self::$plurals, array($rule, $replacement));
}

public static function singular($rule, $replacement) {
    if($key = array_search($rule, self::$uncountables)) unset(self::$uncountables[$key]);
    if($key = array_search($replacement, self::$uncountables)) unset(self::$uncountables[$key]);
    array_unshift(self::$singulars, array($rule, $replacement));
}

Bearbeitet: Es war doch so klar, dass das wieder so ein dummer kleiner Fehler ist: eine schließende Klammer zuviel.
 
Zuletzt bearbeitet:
Zurück