Skip to content

Instantly share code, notes, and snippets.

@bakura10
Created October 11, 2012 15:52
Show Gist options
  • Save bakura10/3873354 to your computer and use it in GitHub Desktop.
Save bakura10/3873354 to your computer and use it in GitHub Desktop.
// Use Reflection
// if by_val === true (or by_reference === false)
extract :
$data = array();
for every elements in object
getter = getElementName
if element is scalar (object or primitive type)
$data[getElementName] = clone getter();
else
// we can't clone collection
$data[getElementName] = getter();
return $data;
hydrating :
$object = tryToConvertDataToObject();
for every value in posted data
if field is scalar
setter = setSomething
object->setter($value)
if field is collection
adder = addSomethings;
remover = removeSomethings;
$coll = create collection from posted data
$oldColl = get existing collection by ref
$addDiff = compute add diff
$removeDiff = compute remove diff
if is_callable($adder)
object->adder($addDiff);
if is_callable($remover)
object->remover($addDiff)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment