szepeviktor/phpstan-wordpress

PHPStan 的 WordPress 扩展

资助包维护!
szepeviktor

安装次数: 3,060,517

依赖项: 548

建议者: 19

安全: 0

星星: 261

关注者: 11

分支: 26

开放问题: 9

类型:phpstan-extension

v1.3.5 2024-06-28 22:27 UTC

README

重要

大家好!我是Viktor,负责维护这个PHPStan扩展。我计划停止为WordPress生态系统做出贡献,因为这非常困难,没有人邀请我加入他们的团队,因为我是一个思考者,一个devops人员,一个工具制造者(而不是建造者)。

请支持我的工作,以避免放弃这个包。

Sponsor

谢谢!

PHPStan 的 WordPress 扩展

Packagist stats Packagist Tweet Build Status PHPStan

WordPress生态系统的静态分析。

安装

将此包添加到您的项目中。

composer require --dev szepeviktor/phpstan-wordpress

使用 phpstan/extension-installer 自动让PHPStan找到它。

composer require --dev phpstan/extension-installer

或者手动将其包含在您的 phpstan.neon 中。

includes:
    - vendor/szepeviktor/phpstan-wordpress/extension.neon

配置

无需额外配置。😃只需配置PHPStan - 例如 - 这样。

parameters:
    level: 5
    paths:
        - plugin.php
        - inc/

请阅读 PHPStan 配置参考

💡 使用Composer自动加载器或一个 自定义自动加载器

用法

只需开始分析: vendor/bin/phpstan analyze 然后修复错误并 GOTO 10

您可以在 examples 目录中找到更多信息,例如 examples/phpstan.neon.dist

在 WooCommerce 网上商店中的使用

请参阅 WooCommerce Stubs

此扩展的功能

  • 使您能够在WordPress插件和主题上运行PHPStan
  • 加载 php-stubs/wordpress-stubs
  • 为许多核心函数提供动态返回类型扩展
  • 定义了一些核心常量
  • 处理特殊函数和类,例如 is_wp_error()
  • 验证在调用 apply_filters() 之前的前置可选文档块,并将其第一个 @param 的类型视为确定的

apply_filters() 文档块的用法

WordPress核心 - 以及更广泛的WordPress生态系统 - 使用PHPDoc文档块以非标准方式记录传递给 apply_filters() 的参数。示例

/**
 * Filters the page title when creating an HTML drop-down list of pages.
 *
 * @param string  $title Page title.
 * @param WP_Post $page  Page data object.
 */
$title = apply_filters( 'list_pages', $title, $page );

此扩展在您的代码中存在这些文档块时理解这些文档块,并使用它们来指导PHPStan将过滤器的返回类型视为确定的,根据第一个 @param 标签。在上面的示例中,这意味着PHPStan将 $title 的类型视为 string

为了最大限度地利用此功能,请确保这些文档块中每个第一个 @param 标签的类型都是准确且正确的。

使您的代码可测试

  • 编写干净的OOP代码:每个文件一个类,类文件中不包含 class Name { ... } 之外的任何代码
  • 对代码进行结构化:统一的类名(WPCS或PSR-4),将类保存在单独的目录 inc/
  • 为类、属性、方法、函数以及调用 apply_filters() 添加适当的PHPDoc块
  • 选择您的 主插件文件部分
  • 避免使用核心常量,使用核心函数
  • 避免PHP的坏部分
    • 函数: evalextractcompactlist
    • 类型混淆$a = '15'; if ($a) ...
  • 如果您需要健壮的代码,请尽量避免所有类型的类型变换(例如,if需要布尔值),请参阅变量处理函数
  • 如果您不受PHP 5的限制,请考虑遵循Neutron标准
  • 不要在WP_CLI::launchWP_CLI::runcommand中启用exit_error,以保持您的代码可测试性

脏角落(常见问题解答)

WordPress使用条件函数和类定义来进行覆盖。当函数之前已经定义时,使用sed命令来排除函数占位符。

sed -i -e 's#function is_gd_image#function __is_gd_image#' vendor/php-stubs/wordpress-stubs/wordpress-stubs.php