/** * @test */ public function testGetProperties() { $o = new MockReflectionTestType(); $ret = PPUtils::objectProperties($o); //TODO: Check count $this->assertEquals(6, count($ret), "Not all properties have been read"); $this->assertEquals('fieldWithSpecialChar', $ret['fieldwith-specialchar']); }
/** * @param array $map intermediate array representation of XML message to deserialize * @param string $isRoot true if this is a root class for SOAP deserialization */ public function init(array $map = array(), $isRoot = true) { if ($isRoot) { if (stristr($map[0]['name'], ":fault")) { throw new PPTransformerException("soapfault"); } else { $map = $map[0]['children']; } } if (empty($map)) { return; } if (($first = reset($map)) && !is_array($first) && !is_numeric(key($map))) { parent::init($map, false); return; } $propertiesMap = PPUtils::objectProperties($this); $arrayCtr = array(); foreach ($map as $element) { if (empty($element) || empty($element['name'])) { continue; } elseif (!array_key_exists($property = strtolower($element['name']), $propertiesMap)) { if (!preg_match('~^(.+)[\\[\\(](\\d+)[\\]\\)]$~', $property, $m)) { continue; } $element['name'] = $m[1]; $element['num'] = $m[2]; } $element['name'] = $propertiesMap[strtolower($element['name'])]; if (PPUtils::isPropertyArray($this, $element['name'])) { $arrayCtr[$element['name']] = isset($arrayCtr[$element['name']]) ? $arrayCtr[$element['name']] + 1 : 0; $element['num'] = $arrayCtr[$element['name']]; } if (!empty($element["attributes"]) && is_array($element["attributes"])) { foreach ($element["attributes"] as $key => $val) { $element["children"][] = array('name' => $key, 'text' => $val); } if (isset($element['text'])) { $element["children"][] = array('name' => 'value', 'text' => $element['text']); } $this->fillRelation($element['name'], $element); } elseif (isset($element['text']) && !is_null($element['text'])) { if (isset($element['num'])) { $this->{$element['name']}[$element['num']] = $element['text']; } else { $this->{$element['name']} = $element['text']; } } elseif (!empty($element["children"]) && is_array($element["children"])) { $this->fillRelation($element['name'], $element); } } }