php-refactoring
Refactor PHP code to improve structure, readability, and maintainability. Use when asked to refactor, restructure, improve code design, or apply design patterns.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
PHP Refactoring
Overview
Apply systematic refactoring techniques to improve PHP code structure while preserving behavior. Supports modern PHP 8.1+ features and common design patterns.
Refactoring Catalog
Extract Method
When a code fragment can be grouped together:
// Before
function printReport(): void {
// print header
echo "=== Report ===\n";
echo "Date: " . date('Y-m-d') . "\n";
// print body
foreach ($items as $item) {
echo "{$item['name']}: {$item['value']}\n";
}
}
// After
function printReport(): void {
$this->printHeader();
$this->printBody($items);
}
Replace Conditional with Polymorphism
// Before
function calculateArea(string $shape, float ...$dims): float {
return match($shape) {
'circle' => M_PI * $dims[0] ** 2,
'rectangle' => $dims[0] * $dims[1],
'triangle' => 0.5 * $dims[0] * $dims[1],
};
}
// After: Use interface + implementations
interface Shape {
public function area(): float;
}
Introduce Parameter Object
When multiple parameters travel together:
// Before
function createUser(string $name, string $email, string $role, int $age): User
// After
function createUser(CreateUserRequest $request): User
Use PHP 8.1+ Features
- Constructor promotion
- Readonly properties
- Enums instead of string constants
- Named arguments for clarity
- Fibers for async operations
- First-class callable syntax
- Intersection types
- Match expressions
Rules
- Never change behavior - refactoring preserves existing functionality
- Small steps - make one refactoring at a time
- Test between steps - run tests after each change
- Commit frequently - each refactoring should be a separate commit
- Explain rationale - document why each change improves the code
Scripts
Use scripts/detect-smells.php to identify common code smells in a file or directory.
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!