wpeventmanager / wp-user-profile-avatar

WordPress currently only allows you to use custom avatars that are uploaded through Gravatar. WP User Profile Avatar allow you to change default WordPress avatar or User profile picture. You can use any photos uploaded into your Media Library or use custom photo url as an avatar instead of using Gravatar.
https://wp-eventmanager.com
GNU General Public License v3.0
1 stars 3 forks source link

PHP 8.2 Deprecated code error #120

Open mistry-jignesh opened 3 weeks ago

mistry-jignesh commented 3 weeks ago

Deprecated: Creation of dynamic property WP_Event_Manager_Alerts::$post_types is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager-alerts/wp-event-manager-alerts.php on line 88

Deprecated: Creation of dynamic property WPEM_Registrations::$post_types is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager-registrations/wp-event-manager-registrations.php on line 96

Deprecated: Creation of dynamic property WP_Event_Manager_Settings::$settings_group is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager/admin/wp-event-manager-settings.php on line 21

Deprecated: Creation of dynamic property WP_Event_Manager_Admin::$settings_page is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager/admin/wp-event-manager-admin.php on line 29

Deprecated: Creation of dynamic property WP_Event_Manager::$forms is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager/wp-event-manager.php on line 104

Deprecated: Creation of dynamic property WP_Event_Manager::$post_types is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager/wp-event-manager.php on line 105

mistry-jignesh commented 1 week ago

I have verified issue. Now Deprecated code error is fixed. Now this error message is not available . So I closed the issue.

ritakikani commented 6 days ago

@RHSRSK , please revert the code which you push in this bug, because this error comes as we directly initialize public variable in public function in class. We must need to first define variable in class then only we have to use that public variable in any function of that class.

For example.

  1. Deprecated: Creation of dynamic property WP_Event_Manager_Alerts::$post_types is deprecated in /home/wazzonau/public_html/wp-content/plugins/wp-event-manager-alerts/wp-event-manager-alerts.php on line 88

for this error, you can go in wp-content/plugins/wp-event-manager-alerts/wp-event-manager-alerts.php file and check, this $post_types variable you used as public variable in function but you didnot define it in class any where.

ans .

class WP_Event_Manager_Alerts { public $post_types;

public function __construct() {
    $this->post_types = Initialize the here
}

}

ritakikani commented 5 days ago

NOTE :

The best solution is to explicitly define all properties within the class. This approach ensures compatibility with future PHP versions and aligns with best practices for code clarity and maintainability. Explicitly defining properties avoids relying on workarounds that might become deprecated or less supported in the future.

Explicitly Defining Properties (Recommended Solution) Define Properties in the Class: Ensure all properties are declared within the class definition. Initialize Properties in the Constructor: Initialize properties in the constructor or appropriate methods.

ex.

class WP_Event_Manager_Alerts { public $post_types;

public function __construct() {
    $this->post_types = array(); // Initialize the property
}

}

Why Explicit Definition is Better ?

Using #[AllowDynamicProperties] (Temporary Workaround) While using #[AllowDynamicProperties] is a valid and quick solution, it should be considered a temporary workaround rather than a permanent fix. This approach is less future-proof and doesn't address the underlying issue of dynamic property creation. ex.

[AllowDynamicProperties]

class WP_Event_Manager_Alerts { // Existing properties and methods }

Explicitly defining properties is the best and recommended solution for long-term code quality and compatibility. It aligns with best practices and prepares your code for future PHP versions. Use #[AllowDynamicProperties] only as a temporary measure if immediate fixes are needed.