szepeviktor/phpstan-wordpress

WordPress extensions for PHPStan

Fund package maintenance!
www.paypal.me/szepeviktor

Installs: 33 771

Dependents: 28

Suggesters: 5

Security: 0

Stars: 58

Watchers: 7

Forks: 7

Open Issues: 0

Type:phpstan-extension

v0.6.0 2020-02-02 20:42 UTC

This package is auto-updated.

Last update: 2020-06-04 12:12:52 UTC


README

CircleCI Packagist Packagist stats PHPStan

Static analysis for the WordPress ecosystem.

Usage

  1. Set up Composer, add szepeviktor/phpstan-wordpress, autoload your plugin or theme, see example/composer.json
  2. Set up PHPStan, see example/phpstan.neon.dist - if you don't use Composer autoloading add autoload_files: and/or autoload_directories:
  3. Get packages composer update --optimize-autoloader
  4. Start analysis vendor/bin/phpstan analyze

Usage in WooCommerce webshops

Please see WooCommerce Stubs

What this extension does

  • Makes it possible to run PHPStan on WordPress plugins and themes
  • Loads php-stubs/wordpress-stubs package
  • Defines some core constants
  • Handles special functions and classes e.g. is_wp_error()

Make your code testable

  • Write clean OOP code: 1 class per file, no other code in class files outside class Name { ... }
  • Structure your code: uniform class names (WPCS or PSR-4), keep classes in a separate directory inc/
  • Add proper PHPDoc blocks to classes, properties, methods, functions
  • Handle these only in your main plugin file
    • Define constants, e.g. MYPLUGIN_PATH
    • Call register_activation_hook(), register_deactivation_hook(), register_uninstall_hook()
    • Class autoloading
    • Load translations
    • Support WP-CLI
    • Decide what to load
    • Start your plugin in a hook (plugins_loaded) - without direct execution
  • Avoid using core constants, use core functions or MYPLUGIN_PATH
  • Avoid bad parts of PHP
    • functions: eval, extract, compact, list
  • If you need robust code try avoiding all kinds of type casting (e.g. if needs a boolean), see Variable handling functions
  • If you are not bound by PHP 5.x consider following Neutron Standard