1. Go to this page and download the library: Download phpcpd-next/phpcpd library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
phpcpd-next / phpcpd example snippets
use LucianoPereira\PhpcpdNext\Orphans;
$result = Orphans::detect('src');
if ($result->hasDefiniteOrphans()) {
foreach ($result->definite() as $orphan) {
echo $orphan->symbol->fqn, ' — ', $orphan->reason, PHP_EOL;
}
}
// app/Console/Commands/CheckDuplication.php
use Illuminate\Console\Command;
use LucianoPereira\PhpcpdNext\Phpcpd;
final class CheckDuplication extends Command
{
protected $signature = 'duplication:check {--min-tokens=70}';
protected $description = 'Detect copy/paste duplication in the application code';
public function handle(): int
{
$clones = Phpcpd::detect(preset: 'laravel', minTokens: (int) $this->option('min-tokens'));
foreach ($clones as $clone) {
$this->warn(sprintf('%d lines duplicated:', $clone->numberOfLines()));
foreach ($clone->files() as $file) {
$this->line(" {$file->name()}:{$file->startLine()}");
}
}
return $clones->count() === 0 ? self::SUCCESS : self::FAILURE;
}
}
use LucianoPereira\PhpcpdNext\Phpcpd;
$clones = Phpcpd::detect(
paths: 'app', // string or list of directories
minTokens: 60,
algorithm: null, // null = Rabin-Karp + TokenBag; or 'suffixtree' / 'tokenbag'
preset: 'laravel', // optional; seeds paths/suffixes/excludes
);
foreach ($clones as $clone) {
// $clone->numberOfLines(), $clone->files(), $clone->isGapped(), $clone->toArray()
}
echo $clones->count(), " clones\n";
use LucianoPereira\PhpcpdNext\PHPUnit\AssertNoDuplication;
use PHPUnit\Framework\TestCase;
final class DuplicationTest extends TestCase
{
use AssertNoDuplication;
public function test_app_is_dry(): void
{
$this->assertNoDuplication(__DIR__ . '/../app', minTokens: 70);
// or, with a preset: $this->assertNoDuplication(preset: 'laravel');
}
}
Failed asserting that the scanned code contains no duplicated code.
2 clones found:
18 lines @ app/Services/Billing.php:42 ↔ app/Services/Invoicing.php:71
[inconsistent] 24 lines @ app/Http/Controllers/UserController.php:90 ↔ app/Http/Controllers/AdminController.php:88
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.