Write modern PHP with generators, SPL, and PHP 8+ features. Use for PHP development or optimization.
Install
npx skillscat add htlin222/dotfiles/php Install via the SkillsCat registry.
About this skill
This skill enables developers to write modern, performant PHP code using generators, SPL data structures, and PHP 8+ language features such as union types, enums, and match expressions. It addresses the need for memory‑efficient processing and improved code clarity in PHP applications, and is appropriate when developing or optimizing PHP projects that require these contemporary constructs.
SKILL.md
PHP Development
Write modern, performant PHP code.
When to use
- Writing PHP code
- PHP 8+ features
- Performance optimization
- Laravel/Symfony development
Modern PHP patterns
Type system (PHP 8+)
// Union types
function process(int|string $id): array|false {
// ...
}
// Constructor property promotion
class User {
public function __construct(
public readonly string $name,
public readonly string $email,
private ?int $age = null,
) {}
}
// Enums
enum Status: string {
case Pending = 'pending';
case Active = 'active';
case Completed = 'completed';
}
// Match expression
$result = match($status) {
Status::Pending => 'Waiting',
Status::Active => 'In Progress',
Status::Completed => 'Done',
};Generators
// Memory-efficient iteration
function readLargeFile(string $path): Generator {
$handle = fopen($path, 'r');
while (($line = fgets($handle)) !== false) {
yield trim($line);
}
fclose($handle);
}
// Usage
foreach (readLargeFile('huge.csv') as $line) {
processLine($line);
}
// Generator with keys
function parseCSV(string $path): Generator {
$handle = fopen($path, 'r');
$headers = fgetcsv($handle);
while (($row = fgetcsv($handle)) !== false) {
yield array_combine($headers, $row);
}
fclose($handle);
}SPL data structures
// Priority queue
$queue = new SplPriorityQueue();
$queue->insert('low', 1);
$queue->insert('high', 10);
$queue->insert('medium', 5);
while (!$queue->isEmpty()) {
echo $queue->extract(); // high, medium, low
}
// Fixed array (memory efficient)
$arr = new SplFixedArray(1000);
$arr[0] = 'value';Error handling
// Custom exceptions
class ValidationException extends Exception {
public function __construct(
public readonly string $field,
string $message,
) {
parent::__construct($message);
}
}
// Try-catch with multiple types
try {
process($data);
} catch (ValidationException $e) {
log("Validation failed: {$e->field}");
} catch (RuntimeException $e) {
log("Runtime error: {$e->getMessage()}");
} finally {
cleanup();
}Attributes (PHP 8)
#[Attribute(Attribute::TARGET_METHOD)]
class Route {
public function __construct(
public string $path,
public string $method = 'GET',
) {}
}
class Controller {
#[Route('/users', 'GET')]
public function listUsers(): array {
// ...
}
}Best practices
- Use strict types:
declare(strict_types=1); - Follow PSR-12 coding standard
- Use Composer for autoloading
- Prefer built-in functions over custom
- Use generators for large datasets
Examples
Input: "Optimize this PHP code"
Action: Profile with Xdebug, use generators, leverage SPL structures
Input: "Modernize to PHP 8"
Action: Add type hints, use match/enums, constructor promotion