Overview

Namespaces

  • Charcoal
    • Config

Classes

  • Charcoal\Config\AbstractConfig
  • Charcoal\Config\AbstractEntity
  • Charcoal\Config\GenericConfig

Interfaces

  • Charcoal\Config\ConfigInterface
  • Charcoal\Config\ConfigurableInterface
  • Charcoal\Config\DelegatesAwareInterface
  • Charcoal\Config\EntityInterface
  • Charcoal\Config\FileAwareInterface
  • Charcoal\Config\SeparatorAwareInterface

Traits

  • Charcoal\Config\ConfigurableTrait
  • Charcoal\Config\DelegatesAwareTrait
  • Charcoal\Config\FileAwareTrait
  • Charcoal\Config\SeparatorAwareTrait
  • Overview
  • Namespace
  • Class
 1: <?php
 2: 
 3: namespace Charcoal\Config;
 4: 
 5: /**
 6:  * Provides an object with the ability to perform lookups in other objects.
 7:  *
 8:  * A "delegate object" acts as a fallback when the current object does not have a requested value.
 9:  *
10:  * This is a full implementation of {@see DelegatesAwareInterface}.
11:  */
12: trait DelegatesAwareTrait
13: {
14:     /**
15:      * Holds a list of all delegate objects.
16:      *
17:      * @var EntityInterface[]
18:      */
19:     private $delegates = [];
20: 
21:     /**
22:      * Assigns a collection of delegare objects.
23:      *
24:      * @param  EntityInterface[] $delegates One or more delegate objects to register.
25:      * @return self
26:      */
27:     final public function setDelegates(array $delegates)
28:     {
29:         $this->delegates = [];
30:         foreach ($delegates as $delegate) {
31:             $this->addDelegate($delegate);
32:         }
33:         return $this;
34:     }
35: 
36:     /**
37:      * Appends a delegare object onto the delegate stack.
38:      *
39:      * @param  EntityInterface $delegate A delegate object to register.
40:      * @return self
41:      */
42:     final public function addDelegate(EntityInterface $delegate)
43:     {
44:         $this->delegates[] = $delegate;
45:         return $this;
46:     }
47: 
48:     /**
49:      * Prepends a delegare object onto the delegate stack.
50:      *
51:      * @param  EntityInterface $delegate A delegate object to register.
52:      * @return self
53:      */
54:     final public function prependDelegate(EntityInterface $delegate)
55:     {
56:         array_unshift($this->delegates, $delegate);
57:         return $this;
58:     }
59: 
60:     /**
61:      * Determines if a delegate object contains the specified key and if its value is not NULL.
62:      *
63:      * Iterates over each object in the delegate stack and stops on
64:      * the first match containing the specified key.
65:      *
66:      * @param  string $key The data key to check.
67:      * @return boolean TRUE if $key exists and has a value other than NULL, FALSE otherwise.
68:      */
69:     final protected function hasInDelegates($key)
70:     {
71:         foreach ($this->delegates as $delegate) {
72:             if (isset($delegate[$key])) {
73:                 return true;
74:             }
75:         }
76:         return false;
77:     }
78: 
79:     /**
80:      * Returns the value from the specified key found on the first delegate object.
81:      *
82:      * Iterates over each object in the delegate stack and stops on
83:      * the first match containing a value that is not NULL.
84:      *
85:      * @param  string $key The data key to retrieve.
86:      * @return mixed Value of the requested $key on success, NULL if the $key is not set.
87:      */
88:     final protected function getInDelegates($key)
89:     {
90:         foreach ($this->delegates as $delegate) {
91:             if (isset($delegate[$key])) {
92:                 return $delegate[$key];
93:             }
94:         }
95:         return null;
96:     }
97: }
98: 
API documentation generated by ApiGen