---
name: php-modern-c0c4e89d6821
description: >
  Write modern PHP 8.x code — typed properties, enums, readonly classes, match
  expressions, named arguments, union/intersection types, fibers, attributes,
  and constructor promotion. Use when writing PHP for WooCommerce or any PHP 8.x
  project.
---

# Modern PHP 8.x Development

## Before writing code

**Fetch live docs**: Web-search `site:php.net manual migration` for the latest PHP migration guide and new features. Check `https://www.php.net/releases/` for current supported versions.

## PHP 8.0 Features

### Constructor Property Promotion

Declare and assign properties directly in the constructor signature — eliminates boilerplate. Useful in WooCommerce extension classes.

### Named Arguments

Call functions with parameter names: `array_slice(array: $arr, offset: 2)`. Improves readability for functions with many parameters.

### Match Expressions

Type-safe `switch` replacement that returns a value. No fall-through, strict comparison. Better than switch for value mapping.

### Union Types

`int|string` in parameter and return types. Allows multiple type declarations.

### Nullsafe Operator

`$obj?->method()?->property` — short-circuits to null if any part is null. Replaces nested null checks.

### Attributes

Native metadata annotations: `#[Route('/path')]`, `#[Override]`. Replace docblock annotations with first-class language support.

## PHP 8.1 Features

### Enums

First-class enumerations — backed (string/int) and unit enums. Perfect for status codes, types, categories. Use backed enums for database/API values.

### Readonly Properties

`public readonly string $name` — can only be set once (usually in constructor). Enforces immutability.

### Fibers

Lightweight concurrency primitives — PHP-level coroutines. Foundation for async frameworks.

### Intersection Types

`TypeA&TypeB` — value must satisfy ALL types. Useful for ensuring a parameter implements multiple interfaces.

### First-class Callable Syntax

`strlen(...)` creates a Closure from a function. Cleaner than `Closure::fromCallable('strlen')`.

## PHP 8.2 Features

### Readonly Classes

`readonly class Dto { ... }` — all properties are implicitly readonly. Perfect for Data Transfer Objects and value objects.

### Deprecated: Dynamic Properties

Creating properties not declared in the class is deprecated. Always declare properties.

### Standalone Types

`true`, `false`, `null` as standalone types in declarations.

### Constants in Traits

Traits can now define constants.

## PHP 8.3 Features

### Typed Class Constants

`const string NAME = 'value';` — type-safe constants. Strengthens contract enforcement.

### `#[\Override]` Attribute

Documents that a method intentionally overrides a parent method. Compiler error if the parent method doesn't exist.

### `json_validate()` Function

Validate JSON without decoding — faster than `json_decode` + error check.

### Dynamic Class Constant Fetch

`$class::{$constant}` — dynamic constant access.

## PHP 8.4 Features

### Property Hooks

Define get/set behavior directly on properties:
```php
public string $name {
    set => strtolower($value);
    get => ucfirst($this->name);
}
```

### Asymmetric Visibility

`public private(set) string $name` — readable publicly, writable only privately.

## PHP for WooCommerce Specifically

### Type Safety

- Use strict types: `declare(strict_types=1);` in all files
- Type all parameters, return types, and properties
- Use union types for nullable: `?string` or `string|null`

### Value Objects

Use readonly classes for DTOs and value objects — common in service layers.

### Enums for Status Codes

Replace string/int constants with backed enums for order statuses, product types, etc.

### WordPress Coding Standards Note

WPCS uses **tabs** for indentation and **Yoda conditions** (`'value' === $var`). This differs from PSR-12 (spaces, non-Yoda). When writing WooCommerce extensions, follow WPCS; for standalone PHP libraries, follow PSR-12.

## Best Practices

- Always use `declare(strict_types=1);`
- Type everything: parameters, returns, properties, constants
- Use readonly for immutable data
- Use enums instead of string/int constants
- Use match instead of switch for value mapping
- Use named arguments for clarity with many-parameter functions
- Use `#[\Override]` when overriding parent methods
- Follow WordPress Coding Standards (WPCS) for WooCommerce extensions

Fetch php.net docs for exact syntax and behavior of new features before using them.


---
Source attribution: OrcaQubits
Original project: https://github.com/OrcaQubits/agentic-commerce-skills-plugins/blob/30cd25c74c8aa7dc49b3ec4847d463f6104439f6/dist/antigravity/woocommerce-commerce/.agent/skills/php-modern/SKILL.md
License: MIT
License information: https://opensource.org/license/mit
Original upstream instructions; downloaded from Mega AI Hub.

## Upstream license notice

MIT License

Copyright (c) 2024-2026 OrcaQubits AI (https://orcaqubits-ai.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



# Mega AI Hub resource metadata

Creator / publisher: OrcaQubits
Original project: https://github.com/OrcaQubits/agentic-commerce-skills-plugins/blob/30cd25c74c8aa7dc49b3ec4847d463f6104439f6/dist/antigravity/woocommerce-commerce/.agent/skills/php-modern/SKILL.md
Attribution basis: Source repository record

Fields of work: Development & Engineering, Marketing, Product Management
Roles: Backend Developer, Growth Product Manager, Product Marketer
Specialties: Backend, Cross Platform
Tools: Woocommerce
Country applicability: Country not specified
Classification basis: Source catalog labels
Instruction SHA-256: 64e9fdd8a0019d284fecd3e867b2ab6bb510b5b83da14890b5f40d9edffd81fd
