for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Solidifier\Defects;
use Solidifier\Defect;
use PhpParser\Node;
class DependencyUponImplementation extends Defect
{
private
$parameterTypeName,
Only declaring a single property per statement allows you to later on add doc comments more easily.
It is also recommended by PSR2, so it is a common style that many people expect.
$parameterTypeName
The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using
class A { var $property; }
the property is implicitly global.
To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.
$parameterType,
$method;
public function __construct(Node $node, $parameterTypeName, $parameterType, $method)
parent::__construct($node);
$this->parameterTypeName = $parameterTypeName;
$this->parameterType = $parameterType;
This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.
To visualize
$a = "a"; $ab = "ab"; $abc = "abc";
will produce issues in the first and second line, while this second example
will produce no issues.
$this->method = $method;
}
public function getMessage()
return sprintf(
'Parameter <id>%s</id> is typed as %s <type>%s</type> (instead of using an interface) in method <method>%s()</method>',
$this->node->name,
name
PhpParser\Node
instanceof
If you access a property on an interface, you most likely code against a concrete implementation of the interface.
Adding an additional type check:
interface SomeInterface { } class SomeClass implements SomeInterface { public $a; } function someFunction(SomeInterface $object) { if ($object instanceof SomeClass) { $a = $object->a; } }
Changing the type hint:
interface SomeInterface { } class SomeClass implements SomeInterface { public $a; } function someFunction(SomeClass $object) { $a = $object->a; }
$this->parameterType,
$this->parameterTypeName,
$this->method
);
Only declaring a single property per statement allows you to later on add doc comments more easily.
It is also recommended by PSR2, so it is a common style that many people expect.