Overview

Namespaces

  • Net
    • Bazzline
      • Propel
        • Behavior
          • EntityInstantiator
  • None

Classes

  • AddToEntityInstantiatorBehavior
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\AbstractEntity
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\Configuration
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\EntityCollection
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\FileContentGenerator
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\Manager
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\ObjectEntity
  • Net\Bazzline\Propel\Behavior\EntityInstantiator\QueryEntity
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 
<?php
/**
 * @author stev leibelt <artodeto@bazzline.net>
 * @since 2015-08-29
 */
namespace Net\Bazzline\Propel\Behavior\EntityInstantiator;

use ArrayAccess;
use Countable;
use Iterator;
use InvalidArgumentException;

class EntityCollection implements ArrayAccess, Countable, Iterator
{
    /** @var array */
    private $entityCollection;

    /** @var array */
    private $hashCollection;

    public function __construct()
    {
        $this->entityCollection = [];
        $this->hashCollection   = [];
    }

    /**
     * @param AbstractEntity $entity
     * @throws InvalidArgumentException
     */
    public function add(
        AbstractEntity $entity
    ) {
        $this->throwInvalidArgumentExceptionIfEntityWasAlreadyAdded($entity);
        $this->entityCollection[] = $entity;
    }

    /**
     * @param AbstractEntity $entity
     * @throws InvalidArgumentException
     */
    private function throwInvalidArgumentExceptionIfEntityWasAlreadyAdded(
        AbstractEntity $entity
    ) {
        $hash = sha1($entity->databaseName() . '_' . $entity->className());

        if (isset($this->hashCollection[$hash])) {
            throw new InvalidArgumentException(
                'you are trying to add "' . $entity->className() .
                '" twice for the database "' . $entity->databaseName() . '"'
            );
        }

        $this->hashCollection[$hash] = $entity;
    }

    //begin of ArrayAccess
    /**
     * Whether a offset exists
     * @link http://php.net/manual/en/arrayaccess.offsetexists.php
     * @param mixed $offset <p>
     * An offset to check for.
     * </p>
     * @return boolean true on success or false on failure.
     * </p>
     * <p>
     * The return value will be casted to boolean if non-boolean was returned.
     * @since 5.0.0
     */
    public function offsetExists($offset)
    {
        return isset($this->entityCollection[$offset]);
    }

    /**
     * Offset to retrieve
     * @link http://php.net/manual/en/arrayaccess.offsetget.php
     * @param mixed|AbstractEntity $offset <p>
     * The offset to retrieve.
     * </p>
     * @return mixed Can return all value types.
     * @since 5.0.0
     */
    public function offsetGet($offset)
    {
        return ($this->offsetExists($offset))
            ? $this->entityCollection[$offset]
            : null;
    }

    /**
     * Offset to set
     * @link http://php.net/manual/en/arrayaccess.offsetset.php
     * @param mixed $offset <p>
     * The offset to assign the value to.
     * </p>
     * @param mixed|AbstractEntity $value <p>
     * The value to set.
     * </p>
     * @return void
     * @since 5.0.0
     */
    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->entityCollection[] = $value;
        } else {
            $this->entityCollection[$offset] = $value;
        }
    }

    /**
     * Offset to unset
     * @link http://php.net/manual/en/arrayaccess.offsetunset.php
     * @param mixed $offset <p>
     * The offset to unset.
     * </p>
     * @return void
     * @since 5.0.0
     */
    public function offsetUnset($offset)
    {
        unset($this->entityCollection[$offset]);
    }

    //end of ArrayAccess

    //begin of Countable
    /**
     * Count elements of an object
     * @link http://php.net/manual/en/countable.count.php
     * @return int The custom count as an integer.
     * </p>
     * <p>
     * The return value is cast to an integer.
     * @since 5.1.0
     */
    public function count()
    {
        return count($this->entityCollection);
    }
    //end of Countable

    //begin of Iterator
    /**
     * Return the current element
     * @link http://php.net/manual/en/iterator.current.php
     * @return mixed|AbstractEntity Can return any type.
     * @since 5.0.0
     */
    public function current()
    {
        return current($this->entityCollection);
    }

    /**
     * Move forward to next element
     * @link http://php.net/manual/en/iterator.next.php
     * @return void Any returned value is ignored.
     * @since 5.0.0
     */
    public function next()
    {
        next($this->entityCollection);
    }

    /**
     * Return the key of the current element
     * @link http://php.net/manual/en/iterator.key.php
     * @return mixed scalar on success, or null on failure.
     * @since 5.0.0
     */
    public function key()
    {
        return key($this->entityCollection);
    }

    /**
     * Checks if current position is valid
     * @link http://php.net/manual/en/iterator.valid.php
     * @return boolean The return value will be casted to boolean and then evaluated.
     * Returns true on success or false on failure.
     * @since 5.0.0
     */
    public function valid()
    {
        return (!is_null($this->key()));
    }

    /**
     * Rewind the Iterator to the first element
     * @link http://php.net/manual/en/iterator.rewind.php
     * @return void Any returned value is ignored.
     * @since 5.0.0
     */
    public function rewind()
    {
        reset($this->entityCollection);
    }
    //end of Iterator
}
PHP EntityInstantiator Propel Behavior by bazzline.net API documentation generated by ApiGen