diff --git a/includes/class-wc-checkout.php b/includes/class-wc-checkout.php index abc1704e682..6645d1f06cf 100644 --- a/includes/class-wc-checkout.php +++ b/includes/class-wc-checkout.php @@ -8,8 +8,6 @@ * @version 3.4.0 */ -use Automattic\WooCommerce\Tools\DependencyManagement\ObjectContainer; - defined( 'ABSPATH' ) || exit; /** @@ -21,8 +19,6 @@ class WC_Checkout { * The single instance of the class. * * @var WC_Checkout|null - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ protected static $instance = null; @@ -53,23 +49,19 @@ class WC_Checkout { * @since 2.1 * @static * @return WC_Checkout Main instance - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ public static function instance() { - return self::$instance = ObjectContainer::get_instance_of( __CLASS__ ); - } + if ( is_null( self::$instance ) ) { + self::$instance = new self(); - /** - * Class constructor, hooks the appropriate actions. - */ - public function __construct() { - // Hook in actions once. - add_action( 'woocommerce_checkout_billing', array( $this, 'checkout_form_billing' ) ); - add_action( 'woocommerce_checkout_shipping', array( $this, 'checkout_form_shipping' ) ); + // Hook in actions once. + add_action( 'woocommerce_checkout_billing', array( self::$instance, 'checkout_form_billing' ) ); + add_action( 'woocommerce_checkout_shipping', array( self::$instance, 'checkout_form_shipping' ) ); - // woocommerce_checkout_init action is ran once when the class is first constructed. - do_action( 'woocommerce_checkout_init', $this ); + // woocommerce_checkout_init action is ran once when the class is first constructed. + do_action( 'woocommerce_checkout_init', self::$instance ); + } + return self::$instance; } /** diff --git a/includes/class-wc-emails.php b/includes/class-wc-emails.php index cb98151b283..3edef5e03f3 100644 --- a/includes/class-wc-emails.php +++ b/includes/class-wc-emails.php @@ -9,7 +9,6 @@ */ use Automattic\Jetpack\Constants; -use Automattic\WooCommerce\Tools\DependencyManagement\ObjectContainer; defined( 'ABSPATH' ) || exit; @@ -29,8 +28,6 @@ class WC_Emails { * The single instance of the class * * @var WC_Emails - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ protected static $_instance = null; @@ -49,11 +46,12 @@ class WC_Emails { * @since 2.1 * @static * @return WC_Emails Main instance - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ public static function instance() { - return self::$_instance = ObjectContainer::get_instance_of( __CLASS__ ); + if ( is_null( self::$_instance ) ) { + self::$_instance = new self(); + } + return self::$_instance; } /** @@ -292,14 +290,12 @@ class WC_Emails { array( '{site_title}', '{site_address}', - '{site_url}', '{woocommerce}', '{WooCommerce}', ), array( $this->get_blogname(), $domain, - $domain, 'WooCommerce', 'WooCommerce', ), diff --git a/includes/class-wc-payment-gateways.php b/includes/class-wc-payment-gateways.php index 7182367e5ae..b7701cc758f 100644 --- a/includes/class-wc-payment-gateways.php +++ b/includes/class-wc-payment-gateways.php @@ -8,8 +8,6 @@ * @package WooCommerce/Classes/Payment */ -use Automattic\WooCommerce\Tools\DependencyManagement\ObjectContainer; - defined( 'ABSPATH' ) || exit; /** @@ -29,8 +27,6 @@ class WC_Payment_Gateways { * * @var WC_Payment_Gateways * @since 2.1.0 - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ protected static $_instance = null; @@ -41,11 +37,12 @@ class WC_Payment_Gateways { * * @since 2.1 * @return WC_Payment_Gateways Main instance - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ public static function instance() { - return self::$_instance = ObjectContainer::get_instance_of( __CLASS__ ); + if ( is_null( self::$_instance ) ) { + self::$_instance = new self(); + } + return self::$_instance; } /** diff --git a/includes/class-wc-shipping.php b/includes/class-wc-shipping.php index 979588ac5d4..8027b84a693 100644 --- a/includes/class-wc-shipping.php +++ b/includes/class-wc-shipping.php @@ -9,7 +9,6 @@ */ use Automattic\Jetpack\Constants; -use Automattic\WooCommerce\Tools\DependencyManagement\ObjectContainer; if ( ! defined( 'ABSPATH' ) ) { exit; @@ -53,8 +52,6 @@ class WC_Shipping { * * @var WC_Shipping * @since 2.1 - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ protected static $_instance = null; @@ -65,11 +62,12 @@ class WC_Shipping { * * @since 2.1 * @return WC_Shipping Main instance - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ public static function instance() { - return self::$_instance = ObjectContainer::get_instance_of( __CLASS__ ); + if ( is_null( self::$_instance ) ) { + self::$_instance = new self(); + } + return self::$_instance; } /** @@ -334,26 +332,7 @@ class WC_Shipping { if ( ! is_array( $stored_rates ) || $package_hash !== $stored_rates['package_hash'] || 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' ) ) { foreach ( $this->load_shipping_methods( $package ) as $shipping_method ) { if ( ! $shipping_method->supports( 'shipping-zones' ) || $shipping_method->get_instance_id() ) { - /** - * Fires before getting shipping rates for a package. - * - * @since 4.3.0 - * @param array $package Package of cart items. - * @param WC_Shipping_Method $shipping_method Shipping method instance. - */ - do_action( 'woocommerce_before_get_rates_for_package', $package, $shipping_method ); - - // Use + instead of array_merge to maintain numeric keys. - $package['rates'] = $package['rates'] + $shipping_method->get_rates_for_package( $package ); - - /** - * Fires after getting shipping rates for a package. - * - * @since 4.3.0 - * @param array $package Package of cart items. - * @param WC_Shipping_Method $shipping_method Shipping method instance. - */ - do_action( 'woocommerce_after_get_rates_for_package', $package, $shipping_method ); + $package['rates'] = $package['rates'] + $shipping_method->get_rates_for_package( $package ); // + instead of array_merge maintains numeric keys } } diff --git a/includes/class-woocommerce.php b/includes/class-woocommerce.php index d6476b93101..116aba751c3 100644 --- a/includes/class-woocommerce.php +++ b/includes/class-woocommerce.php @@ -8,9 +8,6 @@ defined( 'ABSPATH' ) || exit; -use Automattic\WooCommerce\Tools\DependencyManagement\ObjectContainer; -use Automattic\WooCommerce\Providers\CustomerProvider; - /** * Main WooCommerce Class. * @@ -39,8 +36,6 @@ final class WooCommerce { * * @var WooCommerce * @since 2.1 - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ protected static $_instance = null; @@ -114,20 +109,6 @@ final class WooCommerce { */ public $deprecated_hook_handlers = array(); - /** - * The container used for dependency injection. - * - * @var ObjectContainer - */ - private $container; - - /** - * The instance of CustomerProvider to use. - * - * @var CustomerProvider - */ - private $customer_provider; - /** * Main WooCommerce Instance. * @@ -137,11 +118,12 @@ final class WooCommerce { * @static * @see WC() * @return WooCommerce - Main instance. - * - * @deprecated 4.3.0 Use dependency injection instead, see the ObjectContainer class. */ public static function instance() { - return self::$_instance = ObjectContainer::get_instance_of( __CLASS__ ); + if ( is_null( self::$_instance ) ) { + self::$_instance = new self(); + } + return self::$_instance; } /** @@ -177,10 +159,7 @@ final class WooCommerce { /** * WooCommerce Constructor. */ - public function __construct( ObjectContainer $container, CustomerProvider $customer_provider ) { - $this->container = $container; - $this->customer_provider = $customer_provider; - + public function __construct() { $this->define_constants(); $this->define_tables(); $this->includes(); @@ -498,8 +477,8 @@ final class WooCommerce { } $this->theme_support_includes(); - $this->query = $this->container->get( WC_Query::class ); - $this->api = $this->container->get( WC_API::class ); + $this->query = new WC_Query(); + $this->api = new WC_API(); $this->api->init(); } @@ -581,13 +560,13 @@ final class WooCommerce { $this->load_plugin_textdomain(); // Load class instances. - $this->product_factory = $this->container->get( WC_Product_Factory::class ); - $this->order_factory = $this->container->get( WC_Order_Factory::class ); - $this->countries = $this->container->get( WC_Countries::class ); - $this->integrations = $this->container->get( WC_Integrations::class ); - $this->structured_data = $this->container->get( WC_Structured_Data::class ); - $this->deprecated_hook_handlers['actions'] = $this->container->get( WC_Deprecated_Action_Hooks::class ); - $this->deprecated_hook_handlers['filters'] = $this->container->get( WC_Deprecated_Filter_Hooks::class ); + $this->product_factory = new WC_Product_Factory(); + $this->order_factory = new WC_Order_Factory(); + $this->countries = new WC_Countries(); + $this->integrations = new WC_Integrations(); + $this->structured_data = new WC_Structured_Data(); + $this->deprecated_hook_handlers['actions'] = new WC_Deprecated_Action_Hooks(); + $this->deprecated_hook_handlers['filters'] = new WC_Deprecated_Filter_Hooks(); // Classes/actions loaded for the frontend and for ajax requests. if ( $this->is_request( 'frontend' ) ) { @@ -775,12 +754,12 @@ final class WooCommerce { public function initialize_cart() { // Cart needs customer info. if ( is_null( $this->customer ) || ! $this->customer instanceof WC_Customer ) { - $this->customer = $this->customer_provider->get_logged_in_customer(); + $this->customer = new WC_Customer( get_current_user_id(), true ); // Customer should be saved during shutdown. add_action( 'shutdown', array( $this->customer, 'save' ), 10 ); } if ( is_null( $this->cart ) || ! $this->cart instanceof WC_Cart ) { - $this->cart = $this->container->get( WC_Cart::class ); + $this->cart = new WC_Cart(); } } @@ -794,7 +773,7 @@ final class WooCommerce { // Session class, handles session data for users - can be overwritten if custom handler is needed. $session_class = apply_filters( 'woocommerce_session_handler', 'WC_Session_Handler' ); if ( is_null( $this->session ) || ! $this->session instanceof $session_class ) { - $this->session = $this->container->get( $session_class ); + $this->session = new $session_class(); $this->session->init(); } } @@ -834,9 +813,11 @@ final class WooCommerce { * Get queue instance. * * @return WC_Queue_Interface + * + * @deprecated 4.3.0 Use the container to get an instance of WC_Queue_Interface instead. */ public function queue() { - return $this->container->get( WC_Queue_Interface::class ); + return WC_Queue::instance(); } /** @@ -845,7 +826,7 @@ final class WooCommerce { * @return WC_Checkout */ public function checkout() { - return $this->container->get( WC_Checkout::class ); + return WC_Checkout::instance(); } /** @@ -854,7 +835,7 @@ final class WooCommerce { * @return WC_Payment_Gateways */ public function payment_gateways() { - return $this->container->get( WC_Payment_Gateways::class ); + return WC_Payment_Gateways::instance(); } /** @@ -863,7 +844,7 @@ final class WooCommerce { * @return WC_Shipping */ public function shipping() { - return $this->container->get( WC_Shipping::class ); + return WC_Shipping::instance(); } /** @@ -872,7 +853,7 @@ final class WooCommerce { * @return WC_Emails */ public function mailer() { - return $this->container->get( WC_Emails::class ); + return WC_Emails::instance(); } /** diff --git a/includes/queue/class-wc-queue.php b/includes/queue/class-wc-queue.php index 9da2e84b2c9..ec47d375105 100644 --- a/includes/queue/class-wc-queue.php +++ b/includes/queue/class-wc-queue.php @@ -6,8 +6,6 @@ * @package WooCommerce/Interface */ -use Automattic\WooCommerce\Tools\DependencyManagement\ObjectContainer; - if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } @@ -19,7 +17,7 @@ if ( ! defined( 'ABSPATH' ) ) { * * @version 3.5.0 * - * @deprecated 4.3.0 Use dependency injection instead to get an instance of WC_Query_Interface, see the ObjectContainer class. + * @deprecated 4.3.0 Use the container to get an instance of WC_Queue_Interface instead. */ class WC_Queue { @@ -43,7 +41,13 @@ class WC_Queue { * @return WC_Queue_Interface */ final public static function instance() { - return self::$instance = ObjectContainer::get_instance_of( WC_Queue_Interface::class ); + + if ( is_null( self::$instance ) ) { + $class = self::get_class(); + self::$instance = new $class(); + self::$instance = self::validate_instance( self::$instance ); + } + return self::$instance; } /** diff --git a/src/Providers/CustomerProvider.php b/src/Providers/CustomerProvider.php deleted file mode 100644 index 940cb0298ed..00000000000 --- a/src/Providers/CustomerProvider.php +++ /dev/null @@ -1,36 +0,0 @@ -reflection_container = new WooReflectionContainer(); $container->delegate( self::$instance->reflection_container ); - // Perform any required manual class and service provider registration. - self::$instance->register_classes(); + // Perform any required service provider registration. self::$instance->register_service_providers(); } @@ -115,24 +114,6 @@ final class ObjectContainer { $this->container = $container; } - /** - * Register class resolutions for which default autowiring is not appropriate/enough. - */ - private function register_classes() { - $singletons = array( - \CustomerProvider::class, - \WC_Checkout::class, - \WC_Emails::class, - \WC_Payment_Gateways::class, - \WC_Shipping::class, - \WooCommerce::class, - ); - - foreach ( $singletons as $class_name ) { - $this->reflection_container->share( $class_name ); - } - } - /** * Register all the service providers inside the ServiceProviders directory. */ diff --git a/woocommerce.php b/woocommerce.php index ee2a6ccbc45..8f2096b3bb5 100644 --- a/woocommerce.php +++ b/woocommerce.php @@ -46,7 +46,7 @@ ObjectContainer::init(); * @return WooCommerce */ function WC() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid - return ObjectContainer::get_instance_of( WooCommerce::class ); + return WooCommerce::instance(); } // Global for backwards compatibility.