for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Eps\Req2CmdBundle\Params\ParameterMapper;
use Eps\Req2CmdBundle\Exception\ParamMapperException;
use Symfony\Component\HttpFoundation\Request;
class PathParamsMapper implements ParamMapperInterface
{
private const REQUIRED_PROPERTY_PREFIX = '!';
public function map(Request $request, array $propsMap): array
if (!array_key_exists('path', $propsMap)) {
return [];
}
$pathProps = (array)$propsMap['path'];
$result = [];
foreach ($pathProps as $paramName => $paramValue) {
if ($required = $this->isParamRequired($paramName)) {
$required
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
$myVar = 'Value'; $higher = false; if (rand(1, 6) > 3) { $higher = true; } else { $higher = false; }
Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.
$myVar
$higher
$paramName = substr($paramName, 1);
$this->assertRequiredParamIsPresent($paramName, $request);
if (!$request->attributes->has($paramName)) {
continue;
$finalPropName = $paramValue ?? $paramName;
$result[$finalPropName] = $request->attributes->get($paramName);
return $result;
private function isParamRequired(string $paramName): bool
return strpos($paramName, self::REQUIRED_PROPERTY_PREFIX) === 0;
private function assertRequiredParamIsPresent(string $paramName, Request $request): void
throw ParamMapperException::noParamFound($paramName);
if ($request->attributes->get($paramName) === null) {
throw ParamMapperException::paramEmpty($paramName);
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.