Skip to content

Instantly share code, notes, and snippets.

@ppazos
Last active September 19, 2024 05:20
Show Gist options
  • Save ppazos/01f9695c325f8781dd0f03bda475ada8 to your computer and use it in GitHub Desktop.
Save ppazos/01f9695c325f8781dd0f03bda475ada8 to your computer and use it in GitHub Desktop.
Stanrdardizes class names with generics to a single string
<?php
function snakeToCamelCase(string $input): string
{
return ucfirst(str_replace('_', '', ucwords(strtolower($input), '_')));
}
function getClassNameRecursive($string, $start, $end)
{
$out = '';
$ini = strpos($string, $start);
if ($ini === false) return $string;
$ini += strlen($start);
$len = strrpos($string, $end) - $ini;
$out .= substr($string, 0, $ini-1) .'Of'; // HashOf, ListOf, ...
$of = substr($string, $ini, $len);
$key_value_coma = strpos($of, ',');
if ($key_value_coma === false) // List<..>
{
$out .= getClassNameRecursive(trim($of), '<', '>');
}
else // Hash<..., ...>
{
$key = substr($of, 0, $key_value_coma);
$val = substr($of, $key_value_coma+1, strlen($of));
$out .= getClassNameRecursive(trim($key), '<', '>');
$out .= 'And'. getClassNameRecursive(trim($val), '<', '>');
}
return $out;
}
/**
* Hash<String1, Hash<String2, Hash<String3, String4>>> => HashOfString1AndHashOfString2AndHashOfString3AndString4
* Hash<String1, List<List<String4>>> = >HashOfString1AndListOfListOfString4
* List<String> => ListOfString
* String => String
*/
function getClassName(string $umlClassName): string
{
return getClassNameRecursive($umlClassName, '<', '>');
}
echo getClassName('Hash<String1, Hash<String2, Hash<String3, String4>>>') .PHP_EOL;
echo getClassName('Hash<String1, List<List<String4>>>') .PHP_EOL;
echo getClassName('List<String>') .PHP_EOL;
echo getClassName('String') .PHP_EOL;