Source for file set.php
Documentation is available at set.php
* @package Joomla.Platform
* @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* JDataSet is a collection class that allows the developer to operate on a set of JData objects as if they were in a
* @package Joomla.Platform
class JDataSet implements JDataDumpable, ArrayAccess, Countable, Iterator
* The current position of the iterator.
private $_current =
false;
private $_objects =
array();
* @param array $objects An array of JData objects to bind to the data set.
* @throws InvalidArgumentException if an object is not an instance of JData.
$this->_initialise($objects);
* The magic call method is used to call object methods using the iterator.
* Example: $array = $objectList->foo('bar');
* The object list will iterate over its objects and see if each object has a callable 'foo' method.
* If so, it will pass the argument list and assemble any return values. If an object does not have
* a callable method no return value is recorded.
* The keys of the objects and the result array are maintained.
* @param string $method The name of the method called.
* @param array $arguments The arguments of the method called.
* @return array An array of values returned by the methods called on the objects in the data set.
public function __call($method, $arguments =
array())
// Iterate through the objects.
foreach ($this->_objects as $key =>
$object)
// Create the object callback.
$callback =
array($object, $method);
// Check if the callback is callable.
// Call the method for the object.
* The magic get method is used to get a list of properties from the objects in the data set.
* Example: $array = $dataSet->foo;
* This will return a column of the values of the 'foo' property in all the objects
* (or values determined by custom property setters in the individual JData's).
* The result array will contain an entry for each object in the list (compared to __call which may not).
* The keys of the objects and the result array are maintained.
* @param string $property The name of the data property.
* @return array An associative array of the values.
public function __get($property)
// Iterate through the objects.
foreach ($this->_objects as $key =>
$object)
$return[$key] =
$object->$property;
* The magic isset method is used to check the state of an object property using the iterator.
* Example: $array = isset($objectList->foo);
* @param string $property The name of the property.
* @return boolean True if the property is set in any of the objects in the data set.
// Iterate through the objects.
foreach ($this->_objects as $object)
$return[] = isset
($object->$property);
return in_array(true, $return, true) ?
true :
false;
* The magic set method is used to set an object property using the iterator.
* Example: $objectList->foo = 'bar';
* This will set the 'foo' property to 'bar' in all of the objects
* (or a value determined by custom property setters in the JData).
* @param string $property The name of the property.
* @param mixed $value The value to give the data property.
public function __set($property, $value)
// Iterate through the objects.
foreach ($this->_objects as $object)
$object->$property =
$value;
* The magic unset method is used to unset an object property using the iterator.
* Example: unset($objectList->foo);
* This will unset all of the 'foo' properties in the list of JData's.
* @param string $property The name of the property.
// Iterate through the objects.
foreach ($this->_objects as $object)
unset
($object->$property);
* Gets the number of data objects in the set.
* @return integer The number of objects.
return count($this->_objects);
* Clears the objects in the data set.
* @return JDataSet Returns itself to allow chaining.
$this->_objects =
array();
* Get the current data object in the set.
* @return JData The current object, or false if the array is empty or the pointer is beyond the end of the elements.
return is_scalar($this->_current) ?
$this->_objects[$this->_current] :
false;
* Dumps the data object in the set, recursively if appropriate.
* @param integer $depth The maximum depth of recursion (default = 3).
* For example, a depth of 0 will return a stdClass with all the properties in native
* form. A depth of 1 will recurse into the first level of properties only.
* @param SplObjectStorage $dumped An array of already serialized objects that is used to avoid infinite loops.
* @return array An associative array of the date objects in the set, dumped as a simple PHP stdClass object.
public function dump($depth =
3, SplObjectStorage $dumped =
null)
// Check if we should initialise the recursion tracker.
$dumped =
new SplObjectStorage;
// Add this object to the dumped stack.
// Make sure that we have not reached our maximum depth.
// Handle JSON serialization recursively.
foreach ($this->_objects as $key =>
$object)
$objects[$key] =
$object->dump($depth, $dumped);
* Gets the data set in a form that can be serialised to JSON format.
* Note that this method will not return an associative array, otherwise it would be encoded into an object.
* JSON decoders do not consistently maintain the order of associative keys, whereas they do maintain the order of arrays.
* @param mixed $serialized An array of objects that have already been serialized that is used to infinite loops
* @return array An array that can be serialised by json_encode().
// Check if we should initialise the recursion tracker.
if ($serialized ===
null)
// Add this object to the serialized stack.
// Iterate through the objects.
foreach ($this->_objects as $object)
// Call the method for the object.
$return[] =
$object->jsonSerialize($serialized);
* Gets the key of the current object in the iterator.
* @return scalar The object key on success; null on failure.
* Gets the array of keys for all the objects in the iterator (emulates array_keys).
* @return array The array of keys
* Advances the iterator to the next object in the iterator.
// Get the object offsets.
// Check if _current has been set to false but offsetUnset.
if ($this->_current ===
false && isset
($keys[0]))
// This is a special case where offsetUnset was used in a foreach loop and the first element was unset.
$this->_current =
$keys[0];
// Check if there is an object after the current object.
if ($position !==
false && isset
($keys[$position +
1]))
$this->_current =
$keys[$position +
1];
// That was the last object or the internal properties have become corrupted.
* Checks whether an offset exists in the iterator.
* @param mixed $offset The object offset.
* @return boolean True if the object exists, false otherwise.
return isset
($this->_objects[$offset]);
* Gets an offset in the iterator.
* @param mixed $offset The object offset.
* @return JData The object if it exists, null otherwise.
return isset
($this->_objects[$offset]) ?
$this->_objects[$offset] :
null;
* Sets an offset in the iterator.
* @param mixed $offset The object offset.
* @param JData $object The object object.
* @throws InvalidArgumentException if an object is not an instance of JData.
// Check if the object is a JData object.
if (!($object instanceof
JData))
throw
new InvalidArgumentException(sprintf('%s("%s", *%s*)', __METHOD__
, $offset, gettype($object)));
$this->_objects[$offset] =
$object;
* Unsets an offset in the iterator.
* @param mixed $offset The object offset.
// Do nothing if the offset does not exist.
// Check for special handling of unsetting the current position.
if ($offset ==
$this->_current)
// Get the current position.
// Check if there is an object before the current object.
// Move the current position back one.
$this->_current =
$keys[$position -
1];
// We are at the start of the keys AND let's assume we are in a foreach loop and `next` is going to be called.
unset
($this->_objects[$offset]);
* Rewinds the iterator to the first object.
// Set the current position to the first object.
if (empty($this->_objects))
* Validates the iterator.
* @return boolean True if valid, false otherwise.
// Check the current position.
if (!is_scalar($this->_current) ||
!isset
($this->_objects[$this->_current]))
* Initialises the list with an array of objects.
* @param array $input An array of objects.
* @throws InvalidArgumentException if an object is not an instance of JData.
private function _initialise(array $input =
array())
foreach ($input as $key =>
$object)
Documentation generated on Tue, 19 Nov 2013 15:12:56 +0100 by phpDocumentor 1.4.3