_underscore_to_camelcase() bug
-
_underscore_to_camelcase( $str )has a programming error:for ( $i = 1; $i <= count($parts); $i ++ )compares “less than or equal to” (<=) but should compare only “less than” (<). This causes an undefined offset PHP notice for the last value of$i, which equals the length of the array, because there is no item with that index. This is a classic out-by-one error.foreachcan be used with a check inside the loop for the first item to simplify the code and reduce the likelihood of such errors.Also,
strtoupper()inif ($parts[$i] == 'id') ... strtoupper($parts[$i])is redundant, since the returned value is always ‘ID’.In total;
foreach (explode('_', $input) as $part) { $result .= empty($result) ? $part : ($part === 'id' ? 'ID' : ucfirst($part)); }This will have different behaviour where the input parameter is “_foo_bar”. This implementation will convert it to “fooBar”, but the current implementation will convert it to “FooBar”. If this difference is important,
isset()could be used instead, orforeach (... as $i => $part)withif ($i === 0).Unit tests for this function would be very wise.
The topic ‘_underscore_to_camelcase() bug’ is closed to new replies.