Proxy.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DataObject\Copy\Config\Data;
  7. /**
  8. * Proxy class for @see \Magento\Framework\DataObject\Copy\Config\Data
  9. */
  10. class Proxy extends \Magento\Framework\DataObject\Copy\Config\Data implements
  11. \Magento\Framework\ObjectManager\NoninterceptableInterface
  12. {
  13. /**
  14. * Object Manager instance
  15. *
  16. * @var \Magento\Framework\ObjectManagerInterface
  17. */
  18. protected $_objectManager = null;
  19. /**
  20. * Proxied instance name
  21. *
  22. * @var string
  23. */
  24. protected $_instanceName = null;
  25. /**
  26. * Proxied instance
  27. *
  28. * @var \Magento\Framework\DataObject\Copy\Config\Data
  29. */
  30. protected $_subject = null;
  31. /**
  32. * Instance shareability flag
  33. *
  34. * @var bool
  35. */
  36. protected $_isShared = null;
  37. /**
  38. * Proxy constructor
  39. *
  40. * @param \Magento\Framework\ObjectManagerInterface $objectManager
  41. * @param string $instanceName
  42. * @param bool $shared
  43. */
  44. public function __construct(
  45. \Magento\Framework\ObjectManagerInterface $objectManager,
  46. $instanceName = \Magento\Framework\DataObject\Copy\Config\Data::class,
  47. $shared = true
  48. ) {
  49. $this->_objectManager = $objectManager;
  50. $this->_instanceName = $instanceName;
  51. $this->_isShared = $shared;
  52. }
  53. /**
  54. * @return array
  55. */
  56. public function __sleep()
  57. {
  58. return ['_subject', '_isShared'];
  59. }
  60. /**
  61. * Retrieve ObjectManager from global scope
  62. *
  63. * @return void
  64. */
  65. public function __wakeup()
  66. {
  67. $this->_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  68. }
  69. /**
  70. * Clone proxied instance
  71. *
  72. * @return void
  73. */
  74. public function __clone()
  75. {
  76. $this->_subject = clone $this->_getSubject();
  77. }
  78. /**
  79. * Get proxied instance
  80. *
  81. * @return \Magento\Framework\DataObject\Copy\Config\Data
  82. */
  83. protected function _getSubject()
  84. {
  85. if (!$this->_subject) {
  86. $this->_subject = true === $this->_isShared
  87. ? $this->_objectManager->get($this->_instanceName)
  88. : $this->_objectManager->create($this->_instanceName);
  89. }
  90. return $this->_subject;
  91. }
  92. /**
  93. * {@inheritdoc}
  94. */
  95. public function merge(array $config)
  96. {
  97. return $this->_getSubject()->merge($config);
  98. }
  99. /**
  100. * {@inheritdoc}
  101. */
  102. public function get($path = null, $default = null)
  103. {
  104. return $this->_getSubject()->get($path, $default);
  105. }
  106. /**
  107. * {@inheritdoc}
  108. */
  109. public function reset()
  110. {
  111. return $this->_getSubject()->reset();
  112. }
  113. }