Weak hands cannot be planted, meager skills have no foundation. Shallow wisdom is futile, how can one hope for a good name?扰扰从役倦，屑屑身事微。少壮轻年月，迟暮惜光辉。
<html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><?php

namespace WPMailSMTP;

/**
 * Class Upgrade helps upgrade plugin options and similar tasks when the
 * occasion arises.
 *
 * @since 1.1.0
 */
class Upgrade {

	/**
	 * Upgrade constructor.
	 *
	 * @since 1.1.0
	 */
	public function __construct() { }

	/**
	 * Run upgrades.
	 *
	 * @since 4.0.0
	 */
	public function run() {

		$upgrades = $this->upgrades();

		if ( empty( $upgrades ) ) {
			return;
		}

		// Run any available upgrades.
		foreach ( $upgrades as $upgrade ) {
			if ( is_callable( $upgrade ) ) {
				$upgrade();
			}
		}

		// Update version post upgrade(s).
		update_option( 'wp_mail_smtp_version', WPMS_PLUGIN_VER );
	}

	/**
	 * Whether we need to perform an upgrade.
	 *
	 * @since 1.1.0
	 *
	 * @return array
	 */
	protected function upgrades() {

		$version = get_option( 'wp_mail_smtp_version' );

		/**
		 * Filters the list of upgrade callbacks to run.
		 *
		 * @since 4.4.0
		 *
		 * @param array  $upgrades List of upgrade callbacks to run.
		 * @param strin