<?php
namespace App\Model;
class AbstractModel implements \Serializable, \JsonSerializable
{
public function jsonSerialize(): mixed
{
return $this->serialize();
}
public function __serialize(): array {
return $this->serialize();
}
public function serialize(): array
{
$data=[];
foreach(get_object_vars($this) as $key=>$val) {
$value=$val; //store value incase we need to modify format
if($val instanceof \DateTime) {
$value=$val->format('c');
}
$data[$this->camel_to_snake($key)]=$value;
}
return $data;
}
public function __unserialize($serialized) {
return $this->unserialize($serialized);
}
public function unserialize($serialized)
{
foreach($serialized as $key=>$val) {
$prop=$this->snakeToCamel($key);
$f="set".ucfirst($prop);
if(method_exists($this,$f)) {
$this->$f($val);
}
}
}
function camel_to_snake($input)
{
return strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $input));
}
function snakeToCamel($input)
{
return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $input))));
// return lcfirst(str_replace('', '', ucwords($input, '')));
}
}