public function writeValue(Clazz $clazz, $instance) { if ($clazz === Boolean::typeClass()) { $this->writeObject(new Boolean($instance)); } else { if ($clazz === Byte::typeClass()) { $this->writeObject(new Byte($instance)); } else { if ($clazz === Character::typeClass()) { $this->writeObject(new Character($instance)); } else { if ($clazz === Double::typeClass()) { $this->writeObject(new Double($instance)); } else { if ($clazz === Float::typeClass()) { $this->writeObject(new Float($instance)); } else { if ($clazz === Integer::typeClass()) { $this->writeObject(new Integer($instance)); } else { if ($clazz === Long::typeClass()) { $this->writeObject(new Long($instance)); } else { if ($clazz === Short::typeClass()) { $this->writeObject(new Short($instance)); } else { if ($clazz === String::clazz()) { $this->writeString($instance); } else { if ($clazz->isEnum()) { $this->writeEnum($clazz, $instance); } else { $this->writeObject($instance); } } } } } } } } } } }
private function instantiate(Clazz $customSerializer = null, Clazz $instanceClass) { if (!is_null($customSerializer)) { $customFieldSerialize = SerializabilityUtilEx::loadCustomFieldSerializer($customSerializer); if (is_null($customFieldSerialize)) { foreach ($customSerializer->getMethods() as $method) { if ($method->getName() === 'instantiate') { return $method->invoke($this); } } // Ok to not have one } else { if ($customFieldSerialize->hasCustomInstantiateInstance()) { return $customFieldSerialize->instantiateInstance($this); } } } if ($instanceClass->isArray()) { $length = $this->readInt(); // We don't pre-allocate the array; this prevents an allocation attack return new SSSR_BoundedList($instanceClass->getComponentType(), $length); } else { if ($instanceClass->isEnum()) { // Bypass enum transformation $ordinal = $this->readInt(); $values = $instanceClass->getEnumValues(); assert(in_array($ordinal, $values, true)); return $ordinal; } else { $constructor = $instanceClass->getConstructor(); $constructor->setAccessible(true); return $constructor->newInstance(); } } }