htlin222

php

Write modern PHP with generators, SPL, and PHP 8+ features. Use for PHP development or optimization.

htlin222 79 4 Updated 7mo ago
GitHub

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