芝麻web文件管理V1.00
编辑当前文件:/home2/sdektunc/ixilyucatan.gob.mx/libraries/vendor/joomla/di/src/ContainerResource.php
<?php /** * Part of the Joomla Framework DI Package * * @copyright Copyright (C) 2013 - 2018 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ namespace Joomla\DI; /** * Defines the representation of a resource. * * @since 2.0.0 * @internal */ final class ContainerResource { /** * Defines the resource as non-shared * * @const integer * @since 2.0.0 */ public const NO_SHARE = 0; /** * Defines the resource as shared * * @const integer * @since 2.0.0 */ public const SHARE = 1; /** * Defines the resource as non-protected * * @const integer * @since 2.0.0 */ public const NO_PROTECT = 0; /** * Defines the resource as protected * * @const integer * @since 2.0.0 */ public const PROTECT = 2; /** * The container the resource is assigned to * * @var Container * @since 2.0.0 */ private $container; /** * The object instance for a shared object * * @var mixed * @since 2.0.0 */ private $instance; /** * The factory object * * @var callable * @since 2.0.0 */ private $factory; /** * Flag if the resource is shared * * @var boolean * @since 2.0.0 */ private $shared = false; /** * Flag if the resource is protected * * @var boolean * @since 2.0.0 */ private $protected = false; /** * Create a resource representation * * @param Container $container The container * @param mixed $value The resource or its factory closure * @param integer $mode Resource mode, defaults to Resource::NO_SHARE | Resource::NO_PROTECT * * @since 2.0.0 */ public function __construct(Container $container, $value, int $mode = 0) { $this->container = $container; $this->shared = ($mode & self::SHARE) === self::SHARE; $this->protected = ($mode & self::PROTECT) === self::PROTECT; if (\is_callable($value)) { $this->factory = $value; } else { if ($this->shared) { $this->instance = $value; } if (\is_object($value)) { $this->factory = function () use ($value) { return clone $value; }; } else { $this->factory = function () use ($value) { return $value; }; } } } /** * Check whether the resource is shared * * @return boolean * * @since 2.0.0 */ public function isShared(): bool { return $this->shared; } /** * Check whether the resource is protected * * @return boolean * * @since 2.0.0 */ public function isProtected(): bool { return $this->protected; } /** * Get an instance of the resource * * If a factory was provided, the resource is created and - if it is a shared resource - cached internally. * If the resource was provided directly, that resource is returned. * * @return mixed * * @since 2.0.0 */ public function getInstance() { $callable = $this->factory; if ($this->isShared()) { if ($this->instance === null) { $this->instance = $callable($this->container); } return $this->instance; } return $callable($this->container); } /** * Get the factory * * @return callable * * @since 2.0.0 */ public function getFactory(): callable { return $this->factory; } /** * Reset the resource * * The instance cache is cleared, so that the next call to get() returns a new instance. * This has an effect on shared, non-protected resources only. * * @return boolean True if the resource was reset, false otherwise * * @since 2.0.0 */ public function reset(): bool { if ($this->isShared() && !$this->isProtected()) { $this->instance = null; return true; } return false; } }