所有分类
  • 所有分类
  • 站长推荐
  • WP主题
  • WP插件
  • WP教程
  • WP模板库
  • 前端模板
  • PHP源码
  • 延伸阅读

Codestar Framework 框架 PHP 8.2+ 动态属性弃用警告修复教程

问题背景(先吐槽一下)

PHP 8.2 开始对动态属性创建发出了弃用警告,到了 PHP 9.0 会直接禁止。
WordPress 古腾堡编辑器在 PHP 8.2+ 环境下运行时会触发大量这类警告,影响开发体验和日志清洁度。
模板兔的 Modown 主题里用到的 Codestar Framework 框架里就有两个类踩了这个坑:CSF_Metabox 和 CSF_Fields

问题表现

在 PHP 8.2+ 环境下,错误日志会出现类似这样的警告:

PHP Deprecated: Creation of dynamic property CSF_Metabox::$post_formats is deprecated
PHP Deprecated: Creation of dynamic property CSF_Metabox::$page_templates is deprecated
PHP Deprecated: Creation of dynamic property CSF_Field_wp_editor::$field is deprecated
PHP Deprecated: Creation of dynamic property CSF_Field_wp_editor::$value is deprecated

这些警告虽然不会导致功能异常,但会在日志里刷屏,而且未来 PHP 9.0 会直接报错。

修复方案

核心思路很简单:在类中提前声明所有会在构造函数中动态赋值的属性

涉及文件

  • wp-content/themes/modown/framework/classes/metabox.class.php
  • wp-content/themes/modown/framework/classes/fields.class.php

修复步骤

1. 修复 metabox.class.php

问题位置

在 CSF_Metabox 类的构造函数中(第44-45行),直接给未声明的属性赋值:

public function __construct( $key, $params = array() ) {
  // ...
  $this->post_formats   = ( is_array( $this->args['post_formats'] ) ) ? $this->args['post_formats'] : array_filter( (array) $this->args['post_formats'] );
  $this->page_templates = ( is_array( $this->args['page_templates'] ) ) ? $this->args['page_templates'] : array_filter( (array) $this->args['page_templates'] );
  // ...
}

但这两个属性在类的属性声明部分(第13-35行)并没有被声明。

修复方法

在类的属性声明部分(第18行之后)添加这两个属性的声明:

修复前:

public $unique         = '';
public $abstract       = 'metabox';
public $pre_fields     = array();
public $sections       = array();
public $post_type      = array();
public $args           = array(
  // ...
);

修复后:

public $unique         = '';
public $abstract       = 'metabox';
public $pre_fields     = array();
public $sections       = array();
public $post_type      = array();
public $post_formats   = array();
public $page_templates = array();
public $args           = array(
  // ...
);

2. 修复 fields.class.php

问题位置

在 CSF_Fields 抽象类的构造函数中(第19-24行),直接给未声明的属性赋值:

public function __construct( $field = array(), $value = '', $unique = '', $where = '', $parent = '' ) {
  $this->field  = $field;
  $this->value  = $value;
  $this->unique = $unique;
  $this->where  = $where;
  $this->parent = $parent;
}

但这 5 个属性在类的属性声明部分并没有被声明。

修复方法

在类的属性声明部分(第12行之后)添加这 5 个属性的声明:

修复前:

abstract class CSF_Fields extends CSF_Abstract {

  public function __construct( $field = array(), $value = '', $unique = '', $where = '', $parent = '' ) {

修复后:

abstract class CSF_Fields extends CSF_Abstract {

  public $field  = array();
  public $value  = '';
  public $unique = '';
  public $where  = '';
  public $parent = '';

  public function __construct( $field = array(), $value = '', $unique = '', $where = '', $parent = '' ) {

为什么这样修复

  1. 符合 PHP 8.2+ 规范:所有类属性必须在类中显式声明,不能再动态创建。
  2. 兼容未来版本:PHP 9.0 会直接禁止动态属性,提前修复避免未来升级问题。
  3. 不影响功能:只是添加属性声明,不改变任何逻辑,完全向后兼容。
  4. 提升代码质量:显式声明属性让代码更清晰,IDE 也能更好地提供代码提示。

修复效果

修复后:

  • ✅ 消除所有 PHP 8.2+ 动态属性弃用警告
  • ✅ 兼容 PHP 9.0(未来版本)
  • ✅ 不影响现有功能
  • ✅ 代码更规范,IDE 支持更好

注意事项

  1. 属性类型要匹配:声明的默认值类型要和构造函数中赋值的类型一致。
    • $post_formats 和 $page_templates 是数组,所以声明为 array()
    • $value$unique$where$parent 是字符串,所以声明为 ''
  2. 继承关系CSF_Fields 是抽象类,所有继承它的子类(如 CSF_Field_wp_editorCSF_Field_repeater 等)都会自动继承这些属性声明,所以只需要在基类中修复即可。
  3. 测试验证:修复后建议测试一下:
    • 古腾堡编辑器是否正常工作
    • 自定义字段功能是否正常
    • 错误日志中是否还有相关警告

相关链接

总结

这类修复属于“看起来小,其实很重要”的改动。
虽然只是添加几行属性声明,但能解决 PHP 8.2+ 的兼容性问题,确保主题在古腾堡编辑器环境下运行更稳定。
提前修复总比等到 PHP 9.0 再手忙脚乱要好。

声明:1、本站大部分资源均为网络采集所得,仅供用来学习研究,请于下载后的24h内自行删除,正式商用请购买正版。2、所有汉化类文件和个别标注了“原创”的产品均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。3、如若本站内容侵犯了原著者的合法权益,请携带相关版权文件联系我们进行下架或删除。4、虚拟下载类资源具有可复制性,一经下载后本站有权拒绝退款或更换其他商品!
0
分享海报

评论0 注意:评论区不审核也不处理售后问题!如有售后问题请前往用户中心提交工单以详细说明!

请先
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录