ddtcorex/maestro-skills/php-dev-core
- community
Checking that the SKILL.md file is still in the repository.
This skill should be used when the user is writing generic PHP, creating a Composer package, working with PSR-4/PSR-12, running PHPStan/PHPCS, handling PHP security, or building framework-agnostic PHP logic. Foundation skill for PHP development. DEPENDENT on govard-toolbox for environment commands.
Install
npx vskill@latest install ddtcorex/maestro-skills/php-dev-coreSKILL.md
PHP Developer Core
Foundation skill for framework-agnostic PHP. Covers coding standards, Composer, static analysis, security, and testing across Magento 2, Laravel, Symfony, and WordPress. Pair with govard-toolbox for container and environment commands (govard up, govard sh, govard audit). For framework-specific tooling see govard-laravel, govard-symfony, govard-wordpress, or magento2-dev-core for Magento DI and service contracts.
Related Skills
REQUIRED BACKGROUND: Load govard-toolbox first for environment lifecycle and audit matrix. This skill adds language-level patterns. Framework skills (govard-laravel, govard-symfony, govard-wordpress) depend on both govard-toolbox and php-dev-core; magento2-dev-core cross-references this skill for generic PHP and owns Magento-specific DI and plugins.
1. Coding Standards & Types
Every new PHP file MUST start with strict types:
PSR-12 is the default. When framework conventions diverge, PSR-12 wins for generic code.
| Rule | PSR-12 | Notes | |
|---|---|---|---|
| Opening tag | <?php then declare(strict_types=1); | Blank line after declare | |
| Braces | Next line for classes/methods | Same line for controls | |
| Visibility | Always explicit: public, protected, private | Include readonly where needed | |
| Naming | Classes PascalCase, methods camelCase | Constants UPPER_SNAKE | |
| Use grouping | Grouped use for same namespace | One use per line for clarity | |
| Indentation | 4 spaces, no tabs, LF | Line limit 120 |
PSR-4 autoloading is required. Map namespaces in composer.json:
PHP 8.1-8.4 idioms to prefer:
readonlyproperties andreadonly classfor DTOs (8.1+), constructor promotion.enumfor closed sets instead of class constants (8.1+).matchoverswitchfor exhaustive mapping;neverfor functions that always throw.- Intersection types (
X&Y) andmixedwhere genuinely needed; avoid untyped parameters. finalclasses by default; open only with documented reason.
Example with promotion and readonly:
Run composer dump-autoload --optimize after changing autoload maps and verify with composer validate --strict.
2. Composer
Composer is the single source for dependencies, autoloading, and scripts.
Version constraints: prefer ^ (caret) for semver (^8.1 allows 8.x but not 9.0). Never commit vendor/; always commit composer.lock for applications, omit for libraries.
composer.json essentials:
Private package auth belongs in auth.json (gitignored) or env vars, never in composer.json.
3. Static Analysis
Two gates: PHPCS for style, PHPStan for types. Both must pass before merge.
PHPCS (PSR-12)
Fix auto-fixable violations with phpcbf --standard=PSR12 src.
PHPStan (Level 6+)
Level 6 is the minimum; raise to 8 when possible.
Sample phpstan.neon (full config in references/coding-standards.md):
Govard audit is the source of truth for CI — it runs PHPCS PSR12 plus PHPStan and the pub/media guard. The lint check is the only audit check for generic PHP; other values are rejected. Use --mode project for full scans, --mode standalone for isolated packages, --scope diff --base origin/master for PR quick scans (see govard-toolbox ## Audit). Fallback without Govard is phpcs --standard=PSR12 plus standalone phpstan. Treat every PHPStan error as a defect — add types instead of baseline ignores.
4. Security Baseline
Apply these rules to every PHP change regardless of framework.
Input — Never Trust Superglobals
NEVER read $_GET, $_POST, $_REQUEST, $_SESSION, $_COOKIE directly. Use filter_input or framework request objects.
Output — Escape on Render
Escape at the boundary where data becomes HTML, JS, URL, or CSS:
For plain PHP templates, htmlspecialchars with ENT_QUOTES | ENT_SUBSTITUTE and explicit UTF-8 is the baseline. Framework escapers (Magento Escaper, Laravel e(), Symfony Twig autoescape) build on the same principle.
Database — Prepared Statements Only
NEVER interpolate variables into SQL. Use PDO::prepare with bound parameters:
Disable emulated prepares when possible (PDO::ATTR_EMULATE_PREPARES => false).
Cryptography — Use Modern Primitives
| Instead of | Use | |
|---|---|---|
md5(), sha1() | password_hash() / password_verify() for passwords | |
uniqid(), rand(), mt_rand() | random_bytes() / random_int() for tokens | |
serialize() / unserialize() | json_encode() / json_decode() with JSON_THROW_ON_ERROR |
Store secrets in .env (never in code). Generate CSRF tokens with random_bytes and validate with hash_equals. Finding codes: PHP-SEC-xxx / PHP-ARCH-xxx — see references/security-best-practices.md.
5. Testing & Verification
Test Layout
- PHPUnit (or Pest) under
tests/mirroringsrc/via PSR-4autoload-dev. - Unit tests: typed mocks, no real I/O; integration tests: real container/DB with isolation.
Verification Checklist (Run Before Every Commit)
Govard audit (--checks lint) bundles PHPCS, PHPStan, and the pub/media guard. Keep it green in --scope project for releases and --scope diff --base origin/master for PRs.
Audit
For the 4-framework audit matrix (quick vs deep scope, --scope diff vs --scope project, base branch, timing, provider rules) see govard-toolbox ## Audit. This skill delegates all audit-mode and provider specifics there. Fallback without Govard is phpcs --standard=PSR12 plus phpstan analyse -c phpstan.neon at level 6+. No nesting — govard audit and govard tool are host-side commands, not container-nested (do not wrap them with govard sh -c).
References
references/coding-standards.md— PSR-12 checklist, phpstan.neon sample, and strict-types patterns.references/security-best-practices.md— XSS, SQL injection, CSRF, and cryptography examples.references/architecture-patterns.md— Service, DTO (readonly class), factory, and PSR-11 container patterns.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/php-dev-core/SKILL.md
Popularity
- Repository stars
- 4
- Repository forks
- 2
- 7-day trend score
- 8
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/ddtcorex/maestro-skills/php-dev-core)