<?php /** * Encode our data so that it can be serialised */ namespace App\Traits; trait EncodeUTF8 { private function decode(array $values): void { $properties = (new \ReflectionClass($this))->getProperties(); $class = get_class($this); foreach ($properties as $property) { if ($property->isStatic()) { continue; } $name = $property->getName(); $decode = in_array($name,self::cast_utf8); if ($property->isPrivate()) { $name = "\0{$class}\0{$name}"; } elseif ($property->isProtected()) { $name = "\0*\0{$name}"; } if (! array_key_exists($name,$values)) { continue; } $property->setAccessible(true); $property->setValue( $this,$decode ? utf8_decode($values[$name]) : $values[$name] ); } } private function encode(): array { $values = []; $properties = (new \ReflectionClass($this))->getProperties(); $class = get_class($this); foreach ($properties as $property) { // Dont serialize the validation error if ($property->name == 'errors') continue; if ($property->isStatic()) { continue; } $property->setAccessible(true); if (! $property->isInitialized($this)) { continue; } $name = $property->getName(); $encode = in_array($name,self::cast_utf8); if ($property->isPrivate()) { $name = "\0{$class}\0{$name}"; } elseif ($property->isProtected()) { $name = "\0*\0{$name}"; } $property->setAccessible(true); $value = $property->getValue($this); $values[$name] = $encode ? utf8_encode($value) : $value; } return $values; } }